jdk/test/java/util/regex/RegExTest.java
author iignatyev
Tue, 30 May 2017 21:14:45 -0700
changeset 45288 58be10a068c2
parent 44122 65a14579a2ae
child 45466 faf1c55d2046
permissions -rw-r--r--
8180805: move RandomFactory to the top level testlibrary Reviewed-by: bpb, rriggs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
     1
/*
45288
58be10a068c2 8180805: move RandomFactory to the top level testlibrary
iignatyev
parents: 44122
diff changeset
     2
 * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
     4
 *
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
21596
0e3a39f29dbc 8027696: Incorrect copyright header in the tests
serb
parents: 19604
diff changeset
     7
 * published by the Free Software Foundation.
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
     8
 *
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    13
 * accompanied this code).
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    14
 *
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    18
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5295
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5295
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5295
diff changeset
    21
 * questions.
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    22
 */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    23
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    24
/**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    25
 * @test
30370
984bf40cdc67 8079419: Update to RegEx test to use random number library
darcy
parents: 30046
diff changeset
    26
 * @summary tests RegExp framework (use -Dseed=X to set PRNG seed)
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    27
 * @author Mike McCloskey
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    28
 * @bug 4481568 4482696 4495089 4504687 4527731 4599621 4631553 4619345
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    29
 * 4630911 4672616 4711773 4727935 4750573 4792284 4803197 4757029 4808962
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    30
 * 4872664 4803179 4892980 4900747 4945394 4938995 4979006 4994840 4997476
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    31
 * 5013885 5003322 4988891 5098443 5110268 6173522 4829857 5027748 6376940
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    32
 * 6358731 6178785 6284152 6231989 6497148 6486934 6233084 6504326 6635133
11287
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
    33
 * 6350801 6676425 6878475 6919132 6931676 6948903 6990617 7014645 7039066
21668
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
    34
 * 7067045 7014640 7189363 8007395 8013252 8013254 8012646 8023647 6559590
35783
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
    35
 * 8027645 8035076 8039124 8035975 8074678 6854417 8143854 8147531 7071819
37882
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
    36
 * 8151481 4867170 7080302 6728861 6995635 6736245 4916384
38777
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
    37
 * 6328855 6192895 6345469 6988218 6693451 7006761 8140212 8143282 8158482
44122
65a14579a2ae 8176029: Linebreak matcher is not equivalent to the pattern as stated in javadoc
sherman
parents: 38777
diff changeset
    38
 * 8176029
37882
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
    39
 *
45288
58be10a068c2 8180805: move RandomFactory to the top level testlibrary
iignatyev
parents: 44122
diff changeset
    40
 * @library /test/lib
30370
984bf40cdc67 8079419: Update to RegEx test to use random number library
darcy
parents: 30046
diff changeset
    41
 * @run main RegExTest
31645
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
    42
 * @key randomness
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    43
 */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    44
29243
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
    45
import java.util.function.Function;
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    46
import java.util.regex.*;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    47
import java.util.Random;
35783
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
    48
import java.util.Scanner;
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    49
import java.io.*;
35783
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
    50
import java.nio.file.*;
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    51
import java.util.*;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    52
import java.nio.CharBuffer;
17447
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
    53
import java.util.function.Predicate;
45288
58be10a068c2 8180805: move RandomFactory to the top level testlibrary
iignatyev
parents: 44122
diff changeset
    54
import jdk.test.lib.RandomFactory;
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    55
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    56
/**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    57
 * This is a test class created to check the operation of
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    58
 * the Pattern and Matcher classes.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    59
 */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    60
public class RegExTest {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    61
30370
984bf40cdc67 8079419: Update to RegEx test to use random number library
darcy
parents: 30046
diff changeset
    62
    private static Random generator = RandomFactory.getRandom();
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    63
    private static boolean failure = false;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    64
    private static int failCount = 0;
11287
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
    65
    private static String firstFailure = null;
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    66
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    67
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    68
     * Main to interpret arguments and run several tests.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    69
     *
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    70
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    71
    public static void main(String[] args) throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    72
        // Most of the tests are in a file
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    73
        processFile("TestCases.txt");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    74
        //processFile("PerlCases.txt");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    75
        processFile("BMPTestCases.txt");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    76
        processFile("SupplementaryTestCases.txt");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    77
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    78
        // These test many randomly generated char patterns
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    79
        bm();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    80
        slice();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    81
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    82
        // These are hard to put into the file
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    83
        escapes();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    84
        blankInput();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    85
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    86
        // Substitition tests on randomly generated sequences
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    87
        globalSubstitute();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    88
        stringbufferSubstitute();
23734
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
    89
        stringbuilderSubstitute();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
    90
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    91
        substitutionBasher();
23734
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
    92
        substitutionBasher2();
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    93
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    94
        // Canonical Equivalence
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    95
        ceTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    96
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    97
        // Anchors
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    98
        anchorTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
    99
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   100
        // boolean match calls
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   101
        matchesTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   102
        lookingAtTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   103
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   104
        // Pattern API
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   105
        patternMatchesTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   106
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   107
        // Misc
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   108
        lookbehindTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   109
        nullArgumentTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   110
        backRefTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   111
        groupCaptureTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   112
        caretTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   113
        charClassTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   114
        emptyPatternTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   115
        findIntTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   116
        group0Test();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   117
        longPatternTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   118
        octalTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   119
        ampersandTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   120
        negationTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   121
        splitTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   122
        appendTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   123
        caseFoldingTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   124
        commentsTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   125
        unixLinesTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   126
        replaceFirstTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   127
        gTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   128
        zTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   129
        serializeTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   130
        reluctantRepetitionTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   131
        multilineDollarTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   132
        dollarAtEndTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   133
        caretBetweenTerminatorsTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   134
        // This RFE rejected in Tiger numOccurrencesTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   135
        javaCharClassTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   136
        nonCaptureRepetitionTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   137
        notCapturedGroupCurlyMatchTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   138
        escapedSegmentTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   139
        literalPatternTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   140
        literalReplacementTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   141
        regionTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   142
        toStringTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   143
        negatedCharClassTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   144
        findFromTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   145
        boundsTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   146
        unicodeWordBoundsTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   147
        caretAtEndTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   148
        wordSearchTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   149
        hitEndTest();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   150
        toMatchResultTest();
29503
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   151
        toMatchResultTest2();
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   152
        surrogatesInClassTest();
11287
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   153
        removeQEQuotingTest();
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   154
        namedGroupCaptureTest();
4820
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
   155
        nonBmpClassComplementTest();
5610
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
   156
        unicodePropertiesTest();
8173
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
   157
        unicodeHexNotationTest();
9536
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
   158
        unicodeClassesTest();
35783
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
   159
        unicodeCharacterNameTest();
12675
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
   160
        horizontalAndVerticalWSTest();
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
   161
        linebreakTest();
13554
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
   162
        branchTest();
17183
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
   163
        groupCurlyNotFoundSuppTest();
19604
f96e3aef2081 8023647: "abc1c".matches("(\\w)+1\\1")) returns false
sherman
parents: 17447
diff changeset
   164
        groupCurlyBackoffTest();
17447
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
   165
        patternAsPredicate();
25523
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
   166
        invalidFlags();
38777
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
   167
        embeddedFlags();
35783
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
   168
        grapheme();
37882
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
   169
        expoBacktracking();
21668
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
   170
11287
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   171
        if (failure) {
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   172
            throw new
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   173
                RuntimeException("RegExTest failed, 1st failure: " +
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   174
                                 firstFailure);
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   175
        } else {
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   176
            System.err.println("OKAY: All tests passed.");
11287
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   177
        }
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   178
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   179
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   180
    // Utility functions
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   181
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   182
    private static String getRandomAlphaString(int length) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   183
        StringBuffer buf = new StringBuffer(length);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   184
        for (int i=0; i<length; i++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   185
            char randChar = (char)(97 + generator.nextInt(26));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   186
            buf.append(randChar);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   187
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   188
        return buf.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   189
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   190
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   191
    private static void check(Matcher m, String expected) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   192
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   193
        if (!m.group().equals(expected))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   194
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   195
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   196
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   197
    private static void check(Matcher m, String result, boolean expected) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   198
        m.find();
8173
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
   199
        if (m.group().equals(result) != expected)
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
   200
            failCount++;
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   201
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   202
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   203
    private static void check(Pattern p, String s, boolean expected) {
8173
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
   204
        if (p.matcher(s).find() != expected)
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
   205
            failCount++;
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
   206
    }
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
   207
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
   208
    private static void check(String p, String s, boolean expected) {
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
   209
        Matcher matcher = Pattern.compile(p).matcher(s);
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
   210
        if (matcher.find() != expected)
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
   211
            failCount++;
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   212
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   213
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   214
    private static void check(String p, char c, boolean expected) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   215
        String propertyPattern = expected ? "\\p" + p : "\\P" + p;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   216
        Pattern pattern = Pattern.compile(propertyPattern);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   217
        char[] ca = new char[1]; ca[0] = c;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   218
        Matcher matcher = pattern.matcher(new String(ca));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   219
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   220
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   221
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   222
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   223
    private static void check(String p, int codePoint, boolean expected) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   224
        String propertyPattern = expected ? "\\p" + p : "\\P" + p;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   225
        Pattern pattern = Pattern.compile(propertyPattern);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   226
        char[] ca = Character.toChars(codePoint);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   227
        Matcher matcher = pattern.matcher(new String(ca));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   228
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   229
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   230
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   231
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   232
    private static void check(String p, int flag, String input, String s,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   233
                              boolean expected)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   234
    {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   235
        Pattern pattern = Pattern.compile(p, flag);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   236
        Matcher matcher = pattern.matcher(input);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   237
        if (expected)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   238
            check(matcher, s, expected);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   239
        else
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   240
            check(pattern, input, false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   241
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   242
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   243
    private static void report(String testName) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   244
        int spacesToAdd = 30 - testName.length();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   245
        StringBuffer paddedNameBuffer = new StringBuffer(testName);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   246
        for (int i=0; i<spacesToAdd; i++)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   247
            paddedNameBuffer.append(" ");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   248
        String paddedName = paddedNameBuffer.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   249
        System.err.println(paddedName + ": " +
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   250
                           (failCount==0 ? "Passed":"Failed("+failCount+")"));
11287
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   251
        if (failCount > 0) {
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   252
            failure = true;
11287
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   253
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   254
            if (firstFailure == null) {
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   255
                firstFailure = testName;
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   256
            }
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   257
        }
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   258
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   259
        failCount = 0;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   260
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   261
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   262
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   263
     * Converts ASCII alphabet characters [A-Za-z] in the given 's' to
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   264
     * supplementary characters. This method does NOT fully take care
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   265
     * of the regex syntax.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   266
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   267
    private static String toSupplementaries(String s) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   268
        int length = s.length();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   269
        StringBuffer sb = new StringBuffer(length * 2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   270
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   271
        for (int i = 0; i < length; ) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   272
            char c = s.charAt(i++);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   273
            if (c == '\\') {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   274
                sb.append(c);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   275
                if (i < length) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   276
                    c = s.charAt(i++);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   277
                    sb.append(c);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   278
                    if (c == 'u') {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   279
                        // assume no syntax error
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   280
                        sb.append(s.charAt(i++));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   281
                        sb.append(s.charAt(i++));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   282
                        sb.append(s.charAt(i++));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   283
                        sb.append(s.charAt(i++));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   284
                    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   285
                }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   286
            } else if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   287
                sb.append('\ud800').append((char)('\udc00'+c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   288
            } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   289
                sb.append(c);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   290
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   291
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   292
        return sb.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   293
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   294
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   295
    // Regular expression tests
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   296
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   297
    // This is for bug 6178785
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   298
    // Test if an expected NPE gets thrown when passing in a null argument
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   299
    private static boolean check(Runnable test) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   300
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   301
            test.run();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   302
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   303
            return false;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   304
        } catch (NullPointerException npe) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   305
            return true;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   306
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   307
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   308
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   309
    private static void nullArgumentTest() {
29243
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   310
        check(() -> Pattern.compile(null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   311
        check(() -> Pattern.matches(null, null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   312
        check(() -> Pattern.matches("xyz", null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   313
        check(() -> Pattern.quote(null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   314
        check(() -> Pattern.compile("xyz").split(null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   315
        check(() -> Pattern.compile("xyz").matcher(null));
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   316
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   317
        final Matcher m = Pattern.compile("xyz").matcher("xyz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   318
        m.matches();
29243
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   319
        check(() -> m.appendTail((StringBuffer) null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   320
        check(() -> m.appendTail((StringBuilder)null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   321
        check(() -> m.replaceAll((String) null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   322
        check(() -> m.replaceAll((Function<MatchResult, String>)null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   323
        check(() -> m.replaceFirst((String)null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   324
        check(() -> m.replaceFirst((Function<MatchResult, String>) null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   325
        check(() -> m.appendReplacement((StringBuffer)null, null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   326
        check(() -> m.appendReplacement((StringBuilder)null, null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   327
        check(() -> m.reset(null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   328
        check(() -> Matcher.quoteReplacement(null));
80ea8d3d39d0 8071479: Stream and lambdafication improvements to j.u.regex.Matcher
psandoz
parents: 25523
diff changeset
   329
        //check(() -> m.usePattern(null));
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   330
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   331
        report("Null Argument");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   332
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   333
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   334
    // This is for bug6635133
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   335
    // Test if surrogate pair in Unicode escapes can be handled correctly.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   336
    private static void surrogatesInClassTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   337
        Pattern pattern = Pattern.compile("[\\ud834\\udd21-\\ud834\\udd24]");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   338
        Matcher matcher = pattern.matcher("\ud834\udd22");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   339
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   340
            failCount++;
11287
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   341
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   342
        report("Surrogate pair in Unicode escape");
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   343
    }
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   344
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   345
    // This is for bug6990617
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   346
    // Test if Pattern.RemoveQEQuoting works correctly if the octal unicode
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   347
    // char encoding is only 2 or 3 digits instead of 4 and the first quoted
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   348
    // char is an octal digit.
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   349
    private static void removeQEQuotingTest() throws Exception {
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   350
        Pattern pattern =
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   351
            Pattern.compile("\\011\\Q1sometext\\E\\011\\Q2sometext\\E");
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   352
        Matcher matcher = pattern.matcher("\t1sometext\t2sometext");
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   353
        if (!matcher.find())
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   354
            failCount++;
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   355
3db172a5433c 6990617: Regular expression doesn't match if unicode character next to a digit.
sherman
parents: 9536
diff changeset
   356
        report("Remove Q/E Quoting");
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   357
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   358
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   359
    // This is for bug 4988891
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   360
    // Test toMatchResult to see that it is a copy of the Matcher
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   361
    // that is not affected by subsequent operations on the original
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   362
    private static void toMatchResultTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   363
        Pattern pattern = Pattern.compile("squid");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   364
        Matcher matcher = pattern.matcher(
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   365
            "agiantsquidofdestinyasmallsquidoffate");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   366
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   367
        int matcherStart1 = matcher.start();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   368
        MatchResult mr = matcher.toMatchResult();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   369
        if (mr == matcher)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   370
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   371
        int resultStart1 = mr.start();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   372
        if (matcherStart1 != resultStart1)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   373
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   374
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   375
        int matcherStart2 = matcher.start();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   376
        int resultStart2 = mr.start();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   377
        if (matcherStart2 == resultStart2)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   378
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   379
        if (resultStart1 != resultStart2)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   380
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   381
        MatchResult mr2 = matcher.toMatchResult();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   382
        if (mr == mr2)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   383
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   384
        if (mr2.start() != matcherStart2)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   385
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   386
        report("toMatchResult is a copy");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   387
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   388
29503
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   389
    private static void checkExpectedISE(Runnable test) {
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   390
        try {
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   391
            test.run();
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   392
            failCount++;
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   393
        } catch (IllegalStateException x) {
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   394
        } catch (IndexOutOfBoundsException xx) {
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   395
            failCount++;
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   396
        }
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   397
    }
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   398
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   399
    private static void checkExpectedIOOE(Runnable test) {
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   400
        try {
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   401
            test.run();
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   402
            failCount++;
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   403
        } catch (IndexOutOfBoundsException x) {}
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   404
    }
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   405
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   406
    // This is for bug 8074678
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   407
    // Test the result of toMatchResult throws ISE if no match is availble
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   408
    private static void toMatchResultTest2() throws Exception {
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   409
        Matcher matcher = Pattern.compile("nomatch").matcher("hello world");
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   410
        matcher.find();
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   411
        MatchResult mr = matcher.toMatchResult();
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   412
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   413
        checkExpectedISE(() -> mr.start());
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   414
        checkExpectedISE(() -> mr.start(2));
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   415
        checkExpectedISE(() -> mr.end());
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   416
        checkExpectedISE(() -> mr.end(2));
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   417
        checkExpectedISE(() -> mr.group());
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   418
        checkExpectedISE(() -> mr.group(2));
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   419
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   420
        matcher = Pattern.compile("(match)").matcher("there is a match");
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   421
        matcher.find();
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   422
        MatchResult mr2 = matcher.toMatchResult();
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   423
        checkExpectedIOOE(() -> mr2.start(2));
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   424
        checkExpectedIOOE(() -> mr2.end(2));
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   425
        checkExpectedIOOE(() -> mr2.group(2));
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   426
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   427
        report("toMatchResult2 appropriate exceptions");
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   428
    }
95318f222149 8074678: JCK test java_util/regex/MatchResult/index.html starts failing after JDK-8071479
sherman
parents: 29243
diff changeset
   429
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   430
    // This is for bug 5013885
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   431
    // Must test a slice to see if it reports hitEnd correctly
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   432
    private static void hitEndTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   433
        // Basic test of Slice node
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   434
        Pattern p = Pattern.compile("^squidattack");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   435
        Matcher m = p.matcher("squack");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   436
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   437
        if (m.hitEnd())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   438
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   439
        m.reset("squid");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   440
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   441
        if (!m.hitEnd())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   442
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   443
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   444
        // Test Slice, SliceA and SliceU nodes
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   445
        for (int i=0; i<3; i++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   446
            int flags = 0;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   447
            if (i==1) flags = Pattern.CASE_INSENSITIVE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   448
            if (i==2) flags = Pattern.UNICODE_CASE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   449
            p = Pattern.compile("^abc", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   450
            m = p.matcher("ad");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   451
            m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   452
            if (m.hitEnd())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   453
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   454
            m.reset("ab");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   455
            m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   456
            if (!m.hitEnd())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   457
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   458
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   459
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   460
        // Test Boyer-Moore node
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   461
        p = Pattern.compile("catattack");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   462
        m = p.matcher("attack");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   463
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   464
        if (!m.hitEnd())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   465
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   466
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   467
        p = Pattern.compile("catattack");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   468
        m = p.matcher("attackattackattackcatatta");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   469
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   470
        if (!m.hitEnd())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   471
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   472
        report("hitEnd from a Slice");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   473
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   474
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   475
    // This is for bug 4997476
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   476
    // It is weird code submitted by customer demonstrating a regression
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   477
    private static void wordSearchTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   478
        String testString = new String("word1 word2 word3");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   479
        Pattern p = Pattern.compile("\\b");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   480
        Matcher m = p.matcher(testString);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   481
        int position = 0;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   482
        int start = 0;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   483
        while (m.find(position)) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   484
            start = m.start();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   485
            if (start == testString.length())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   486
                break;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   487
            if (m.find(start+1)) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   488
                position = m.start();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   489
            } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   490
                position = testString.length();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   491
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   492
            if (testString.substring(start, position).equals(" "))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   493
                continue;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   494
            if (!testString.substring(start, position-1).startsWith("word"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   495
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   496
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   497
        report("Customer word search");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   498
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   499
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   500
    // This is for bug 4994840
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   501
    private static void caretAtEndTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   502
        // Problem only occurs with multiline patterns
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   503
        // containing a beginning-of-line caret "^" followed
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   504
        // by an expression that also matches the empty string.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   505
        Pattern pattern = Pattern.compile("^x?", Pattern.MULTILINE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   506
        Matcher matcher = pattern.matcher("\r");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   507
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   508
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   509
        report("Caret at end");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   510
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   511
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   512
    // This test is for 4979006
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   513
    // Check to see if word boundary construct properly handles unicode
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   514
    // non spacing marks
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   515
    private static void unicodeWordBoundsTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   516
        String spaces = "  ";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   517
        String wordChar = "a";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   518
        String nsm = "\u030a";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   519
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   520
        assert (Character.getType('\u030a') == Character.NON_SPACING_MARK);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   521
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   522
        Pattern pattern = Pattern.compile("\\b");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   523
        Matcher matcher = pattern.matcher("");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   524
        // S=other B=word character N=non spacing mark .=word boundary
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   525
        // SS.BB.SS
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   526
        String input = spaces + wordChar + wordChar + spaces;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   527
        twoFindIndexes(input, matcher, 2, 4);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   528
        // SS.BBN.SS
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   529
        input = spaces + wordChar +wordChar + nsm + spaces;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   530
        twoFindIndexes(input, matcher, 2, 5);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   531
        // SS.BN.SS
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   532
        input = spaces + wordChar + nsm + spaces;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   533
        twoFindIndexes(input, matcher, 2, 4);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   534
        // SS.BNN.SS
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   535
        input = spaces + wordChar + nsm + nsm + spaces;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   536
        twoFindIndexes(input, matcher, 2, 5);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   537
        // SSN.BB.SS
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   538
        input = spaces + nsm + wordChar + wordChar + spaces;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   539
        twoFindIndexes(input, matcher, 3, 5);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   540
        // SS.BNB.SS
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   541
        input = spaces + wordChar + nsm + wordChar + spaces;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   542
        twoFindIndexes(input, matcher, 2, 5);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   543
        // SSNNSS
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   544
        input = spaces + nsm + nsm + spaces;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   545
        matcher.reset(input);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   546
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   547
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   548
        // SSN.BBN.SS
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   549
        input = spaces + nsm + wordChar + wordChar + nsm + spaces;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   550
        twoFindIndexes(input, matcher, 3, 6);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   551
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   552
        report("Unicode word boundary");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   553
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   554
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   555
    private static void twoFindIndexes(String input, Matcher matcher, int a,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   556
                                       int b) throws Exception
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   557
    {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   558
        matcher.reset(input);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   559
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   560
        if (matcher.start() != a)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   561
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   562
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   563
        if (matcher.start() != b)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   564
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   565
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   566
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   567
    // This test is for 6284152
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   568
    static void check(String regex, String input, String[] expected) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   569
        List<String> result = new ArrayList<String>();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   570
        Pattern p = Pattern.compile(regex);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   571
        Matcher m = p.matcher(input);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   572
        while (m.find()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   573
            result.add(m.group());
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   574
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   575
        if (!Arrays.asList(expected).equals(result))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   576
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   577
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   578
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   579
    private static void lookbehindTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   580
        //Positive
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   581
        check("(?<=%.{0,5})foo\\d",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   582
              "%foo1\n%bar foo2\n%bar  foo3\n%blahblah foo4\nfoo5",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   583
              new String[]{"foo1", "foo2", "foo3"});
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   584
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   585
        //boundary at end of the lookbehind sub-regex should work consistently
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   586
        //with the boundary just after the lookbehind sub-regex
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   587
        check("(?<=.*\\b)foo", "abcd foo", new String[]{"foo"});
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   588
        check("(?<=.*)\\bfoo", "abcd foo", new String[]{"foo"});
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   589
        check("(?<!abc )\\bfoo", "abc foo", new String[0]);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   590
        check("(?<!abc \\b)foo", "abc foo", new String[0]);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   591
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   592
        //Negative
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   593
        check("(?<!%.{0,5})foo\\d",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   594
              "%foo1\n%bar foo2\n%bar  foo3\n%blahblah foo4\nfoo5",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   595
              new String[] {"foo4", "foo5"});
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   596
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   597
        //Positive greedy
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   598
        check("(?<=%b{1,4})foo", "%bbbbfoo", new String[] {"foo"});
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   599
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   600
        //Positive reluctant
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   601
        check("(?<=%b{1,4}?)foo", "%bbbbfoo", new String[] {"foo"});
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   602
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   603
        //supplementary
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   604
        check("(?<=%b{1,4})fo\ud800\udc00o", "%bbbbfo\ud800\udc00o",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   605
              new String[] {"fo\ud800\udc00o"});
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   606
        check("(?<=%b{1,4}?)fo\ud800\udc00o", "%bbbbfo\ud800\udc00o",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   607
              new String[] {"fo\ud800\udc00o"});
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   608
        check("(?<!%b{1,4})fo\ud800\udc00o", "%afo\ud800\udc00o",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   609
              new String[] {"fo\ud800\udc00o"});
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   610
        check("(?<!%b{1,4}?)fo\ud800\udc00o", "%afo\ud800\udc00o",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   611
              new String[] {"fo\ud800\udc00o"});
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   612
        report("Lookbehind");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   613
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   614
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   615
    // This test is for 4938995
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   616
    // Check to see if weak region boundaries are transparent to
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   617
    // lookahead and lookbehind constructs
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   618
    private static void boundsTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   619
        String fullMessage = "catdogcat";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   620
        Pattern pattern = Pattern.compile("(?<=cat)dog(?=cat)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   621
        Matcher matcher = pattern.matcher("catdogca");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   622
        matcher.useTransparentBounds(true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   623
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   624
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   625
        matcher.reset("atdogcat");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   626
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   627
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   628
        matcher.reset(fullMessage);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   629
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   630
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   631
        matcher.reset(fullMessage);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   632
        matcher.region(0,9);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   633
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   634
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   635
        matcher.reset(fullMessage);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   636
        matcher.region(0,6);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   637
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   638
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   639
        matcher.reset(fullMessage);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   640
        matcher.region(3,6);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   641
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   642
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   643
        matcher.useTransparentBounds(false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   644
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   645
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   646
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   647
        // Negative lookahead/lookbehind
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   648
        pattern = Pattern.compile("(?<!cat)dog(?!cat)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   649
        matcher = pattern.matcher("dogcat");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   650
        matcher.useTransparentBounds(true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   651
        matcher.region(0,3);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   652
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   653
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   654
        matcher.reset("catdog");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   655
        matcher.region(3,6);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   656
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   657
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   658
        matcher.useTransparentBounds(false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   659
        matcher.reset("dogcat");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   660
        matcher.region(0,3);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   661
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   662
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   663
        matcher.reset("catdog");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   664
        matcher.region(3,6);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   665
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   666
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   667
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   668
        report("Region bounds transparency");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   669
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   670
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   671
    // This test is for 4945394
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   672
    private static void findFromTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   673
        String message = "This is 40 $0 message.";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   674
        Pattern pat = Pattern.compile("\\$0");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   675
        Matcher match = pat.matcher(message);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   676
        if (!match.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   677
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   678
        if (match.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   679
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   680
        if (match.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   681
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   682
        report("Check for alternating find");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   683
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   684
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   685
    // This test is for 4872664 and 4892980
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   686
    private static void negatedCharClassTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   687
        Pattern pattern = Pattern.compile("[^>]");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   688
        Matcher matcher = pattern.matcher("\u203A");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   689
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   690
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   691
        pattern = Pattern.compile("[^fr]");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   692
        matcher = pattern.matcher("a");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   693
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   694
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   695
        matcher.reset("\u203A");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   696
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   697
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   698
        String s = "for";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   699
        String result[] = s.split("[^fr]");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   700
        if (!result[0].equals("f"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   701
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   702
        if (!result[1].equals("r"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   703
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   704
        s = "f\u203Ar";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   705
        result = s.split("[^fr]");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   706
        if (!result[0].equals("f"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   707
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   708
        if (!result[1].equals("r"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   709
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   710
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   711
        // Test adding to bits, subtracting a node, then adding to bits again
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   712
        pattern = Pattern.compile("[^f\u203Ar]");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   713
        matcher = pattern.matcher("a");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   714
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   715
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   716
        matcher.reset("f");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   717
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   718
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   719
        matcher.reset("\u203A");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   720
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   721
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   722
        matcher.reset("r");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   723
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   724
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   725
        matcher.reset("\u203B");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   726
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   727
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   728
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   729
        // Test subtracting a node, adding to bits, subtracting again
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   730
        pattern = Pattern.compile("[^\u203Ar\u203B]");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   731
        matcher = pattern.matcher("a");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   732
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   733
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   734
        matcher.reset("\u203A");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   735
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   736
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   737
        matcher.reset("r");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   738
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   739
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   740
        matcher.reset("\u203B");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   741
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   742
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   743
        matcher.reset("\u203C");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   744
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   745
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   746
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   747
        report("Negated Character Class");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   748
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   749
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   750
    // This test is for 4628291
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   751
    private static void toStringTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   752
        Pattern pattern = Pattern.compile("b+");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   753
        if (pattern.toString() != "b+")
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   754
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   755
        Matcher matcher = pattern.matcher("aaabbbccc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   756
        String matcherString = matcher.toString(); // unspecified
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   757
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   758
        matcherString = matcher.toString(); // unspecified
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   759
        matcher.region(0,3);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   760
        matcherString = matcher.toString(); // unspecified
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   761
        matcher.reset();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   762
        matcherString = matcher.toString(); // unspecified
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   763
        report("toString");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   764
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   765
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   766
    // This test is for 4808962
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   767
    private static void literalPatternTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   768
        int flags = Pattern.LITERAL;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   769
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   770
        Pattern pattern = Pattern.compile("abc\\t$^", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   771
        check(pattern, "abc\\t$^", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   772
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   773
        pattern = Pattern.compile(Pattern.quote("abc\\t$^"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   774
        check(pattern, "abc\\t$^", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   775
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   776
        pattern = Pattern.compile("\\Qa^$bcabc\\E", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   777
        check(pattern, "\\Qa^$bcabc\\E", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   778
        check(pattern, "a^$bcabc", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   779
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   780
        pattern = Pattern.compile("\\\\Q\\\\E");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   781
        check(pattern, "\\Q\\E", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   782
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   783
        pattern = Pattern.compile("\\Qabc\\Eefg\\\\Q\\\\Ehij");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   784
        check(pattern, "abcefg\\Q\\Ehij", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   785
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   786
        pattern = Pattern.compile("\\\\\\Q\\\\E");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   787
        check(pattern, "\\\\\\\\", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   788
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   789
        pattern = Pattern.compile(Pattern.quote("\\Qa^$bcabc\\E"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   790
        check(pattern, "\\Qa^$bcabc\\E", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   791
        check(pattern, "a^$bcabc", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   792
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   793
        pattern = Pattern.compile(Pattern.quote("\\Qabc\\Edef"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   794
        check(pattern, "\\Qabc\\Edef", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   795
        check(pattern, "abcdef", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   796
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   797
        pattern = Pattern.compile(Pattern.quote("abc\\Edef"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   798
        check(pattern, "abc\\Edef", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   799
        check(pattern, "abcdef", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   800
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   801
        pattern = Pattern.compile(Pattern.quote("\\E"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   802
        check(pattern, "\\E", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   803
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   804
        pattern = Pattern.compile("((((abc.+?:)", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   805
        check(pattern, "((((abc.+?:)", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   806
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   807
        flags |= Pattern.MULTILINE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   808
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   809
        pattern = Pattern.compile("^cat$", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   810
        check(pattern, "abc^cat$def", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   811
        check(pattern, "cat", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   812
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   813
        flags |= Pattern.CASE_INSENSITIVE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   814
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   815
        pattern = Pattern.compile("abcdef", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   816
        check(pattern, "ABCDEF", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   817
        check(pattern, "AbCdEf", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   818
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   819
        flags |= Pattern.DOTALL;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   820
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   821
        pattern = Pattern.compile("a...b", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   822
        check(pattern, "A...b", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   823
        check(pattern, "Axxxb", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   824
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   825
        flags |= Pattern.CANON_EQ;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   826
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   827
        Pattern p = Pattern.compile("testa\u030a", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   828
        check(pattern, "testa\u030a", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   829
        check(pattern, "test\u00e5", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   830
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   831
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   832
        flags = Pattern.LITERAL;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   833
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   834
        pattern = Pattern.compile(toSupplementaries("abc\\t$^"), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   835
        check(pattern, toSupplementaries("abc\\t$^"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   836
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   837
        pattern = Pattern.compile(Pattern.quote(toSupplementaries("abc\\t$^")));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   838
        check(pattern, toSupplementaries("abc\\t$^"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   839
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   840
        pattern = Pattern.compile(toSupplementaries("\\Qa^$bcabc\\E"), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   841
        check(pattern, toSupplementaries("\\Qa^$bcabc\\E"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   842
        check(pattern, toSupplementaries("a^$bcabc"), false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   843
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   844
        pattern = Pattern.compile(Pattern.quote(toSupplementaries("\\Qa^$bcabc\\E")));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   845
        check(pattern, toSupplementaries("\\Qa^$bcabc\\E"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   846
        check(pattern, toSupplementaries("a^$bcabc"), false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   847
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   848
        pattern = Pattern.compile(Pattern.quote(toSupplementaries("\\Qabc\\Edef")));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   849
        check(pattern, toSupplementaries("\\Qabc\\Edef"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   850
        check(pattern, toSupplementaries("abcdef"), false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   851
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   852
        pattern = Pattern.compile(Pattern.quote(toSupplementaries("abc\\Edef")));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   853
        check(pattern, toSupplementaries("abc\\Edef"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   854
        check(pattern, toSupplementaries("abcdef"), false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   855
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   856
        pattern = Pattern.compile(toSupplementaries("((((abc.+?:)"), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   857
        check(pattern, toSupplementaries("((((abc.+?:)"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   858
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   859
        flags |= Pattern.MULTILINE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   860
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   861
        pattern = Pattern.compile(toSupplementaries("^cat$"), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   862
        check(pattern, toSupplementaries("abc^cat$def"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   863
        check(pattern, toSupplementaries("cat"), false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   864
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   865
        flags |= Pattern.DOTALL;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   866
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   867
        // note: this is case-sensitive.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   868
        pattern = Pattern.compile(toSupplementaries("a...b"), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   869
        check(pattern, toSupplementaries("a...b"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   870
        check(pattern, toSupplementaries("axxxb"), false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   871
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   872
        flags |= Pattern.CANON_EQ;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   873
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   874
        String t = toSupplementaries("test");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   875
        p = Pattern.compile(t + "a\u030a", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   876
        check(pattern, t + "a\u030a", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   877
        check(pattern, t + "\u00e5", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   878
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   879
        report("Literal pattern");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   880
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   881
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   882
    // This test is for 4803179
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   883
    // This test is also for 4808962, replacement parts
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   884
    private static void literalReplacementTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   885
        int flags = Pattern.LITERAL;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   886
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   887
        Pattern pattern = Pattern.compile("abc", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   888
        Matcher matcher = pattern.matcher("zzzabczzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   889
        String replaceTest = "$0";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   890
        String result = matcher.replaceAll(replaceTest);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   891
        if (!result.equals("zzzabczzz"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   892
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   893
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   894
        matcher.reset();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   895
        String literalReplacement = matcher.quoteReplacement(replaceTest);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   896
        result = matcher.replaceAll(literalReplacement);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   897
        if (!result.equals("zzz$0zzz"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   898
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   899
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   900
        matcher.reset();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   901
        replaceTest = "\\t$\\$";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   902
        literalReplacement = matcher.quoteReplacement(replaceTest);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   903
        result = matcher.replaceAll(literalReplacement);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   904
        if (!result.equals("zzz\\t$\\$zzz"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   905
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   906
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   907
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   908
        pattern = Pattern.compile(toSupplementaries("abc"), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   909
        matcher = pattern.matcher(toSupplementaries("zzzabczzz"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   910
        replaceTest = "$0";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   911
        result = matcher.replaceAll(replaceTest);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   912
        if (!result.equals(toSupplementaries("zzzabczzz")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   913
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   914
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   915
        matcher.reset();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   916
        literalReplacement = matcher.quoteReplacement(replaceTest);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   917
        result = matcher.replaceAll(literalReplacement);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   918
        if (!result.equals(toSupplementaries("zzz$0zzz")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   919
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   920
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   921
        matcher.reset();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   922
        replaceTest = "\\t$\\$";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   923
        literalReplacement = matcher.quoteReplacement(replaceTest);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   924
        result = matcher.replaceAll(literalReplacement);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   925
        if (!result.equals(toSupplementaries("zzz\\t$\\$zzz")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   926
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   927
12432
748fcaa0e0c1 7067045: replaceAll("\u20ac", "$"); causses java.lang.StringIndexOutOfBoundsExceptio
sherman
parents: 11287
diff changeset
   928
        // IAE should be thrown if backslash or '$' is the last character
748fcaa0e0c1 7067045: replaceAll("\u20ac", "$"); causses java.lang.StringIndexOutOfBoundsExceptio
sherman
parents: 11287
diff changeset
   929
        // in replacement string
748fcaa0e0c1 7067045: replaceAll("\u20ac", "$"); causses java.lang.StringIndexOutOfBoundsExceptio
sherman
parents: 11287
diff changeset
   930
        try {
748fcaa0e0c1 7067045: replaceAll("\u20ac", "$"); causses java.lang.StringIndexOutOfBoundsExceptio
sherman
parents: 11287
diff changeset
   931
            "\uac00".replaceAll("\uac00", "$");
12675
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
   932
            failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
   933
        } catch (IllegalArgumentException iie) {
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
   934
        } catch (Exception e) {
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
   935
            failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
   936
        }
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
   937
        try {
12432
748fcaa0e0c1 7067045: replaceAll("\u20ac", "$"); causses java.lang.StringIndexOutOfBoundsExceptio
sherman
parents: 11287
diff changeset
   938
            "\uac00".replaceAll("\uac00", "\\");
748fcaa0e0c1 7067045: replaceAll("\u20ac", "$"); causses java.lang.StringIndexOutOfBoundsExceptio
sherman
parents: 11287
diff changeset
   939
            failCount++;
748fcaa0e0c1 7067045: replaceAll("\u20ac", "$"); causses java.lang.StringIndexOutOfBoundsExceptio
sherman
parents: 11287
diff changeset
   940
        } catch (IllegalArgumentException iie) {
748fcaa0e0c1 7067045: replaceAll("\u20ac", "$"); causses java.lang.StringIndexOutOfBoundsExceptio
sherman
parents: 11287
diff changeset
   941
        } catch (Exception e) {
748fcaa0e0c1 7067045: replaceAll("\u20ac", "$"); causses java.lang.StringIndexOutOfBoundsExceptio
sherman
parents: 11287
diff changeset
   942
            failCount++;
748fcaa0e0c1 7067045: replaceAll("\u20ac", "$"); causses java.lang.StringIndexOutOfBoundsExceptio
sherman
parents: 11287
diff changeset
   943
        }
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   944
        report("Literal replacement");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   945
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   946
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   947
    // This test is for 4757029
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   948
    private static void regionTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   949
        Pattern pattern = Pattern.compile("abc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   950
        Matcher matcher = pattern.matcher("abcdefabc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   951
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   952
        matcher.region(0,9);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   953
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   954
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   955
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   956
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   957
        matcher.region(0,3);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   958
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   959
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   960
        matcher.region(3,6);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   961
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   962
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   963
        matcher.region(0,2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   964
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   965
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   966
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   967
        expectRegionFail(matcher, 1, -1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   968
        expectRegionFail(matcher, -1, -1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   969
        expectRegionFail(matcher, -1, 1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   970
        expectRegionFail(matcher, 5, 3);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   971
        expectRegionFail(matcher, 5, 12);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   972
        expectRegionFail(matcher, 12, 12);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   973
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   974
        pattern = Pattern.compile("^abc$");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   975
        matcher = pattern.matcher("zzzabczzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   976
        matcher.region(0,9);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   977
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   978
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   979
        matcher.region(3,6);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   980
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   981
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   982
        matcher.region(3,6);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   983
        matcher.useAnchoringBounds(false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   984
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   985
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   986
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   987
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   988
        pattern = Pattern.compile(toSupplementaries("abc"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   989
        matcher = pattern.matcher(toSupplementaries("abcdefabc"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   990
        matcher.region(0,9*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   991
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   992
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   993
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   994
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   995
        matcher.region(0,3*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   996
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   997
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   998
        matcher.region(1,3*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
   999
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1000
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1001
        matcher.region(3*2,6*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1002
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1003
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1004
        matcher.region(0,2*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1005
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1006
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1007
        matcher.region(0,2*2+1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1008
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1009
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1010
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1011
        expectRegionFail(matcher, 1*2, -1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1012
        expectRegionFail(matcher, -1, -1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1013
        expectRegionFail(matcher, -1, 1*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1014
        expectRegionFail(matcher, 5*2, 3*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1015
        expectRegionFail(matcher, 5*2, 12*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1016
        expectRegionFail(matcher, 12*2, 12*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1017
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1018
        pattern = Pattern.compile(toSupplementaries("^abc$"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1019
        matcher = pattern.matcher(toSupplementaries("zzzabczzz"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1020
        matcher.region(0,9*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1021
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1022
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1023
        matcher.region(3*2,6*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1024
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1025
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1026
        matcher.region(3*2+1,6*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1027
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1028
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1029
        matcher.region(3*2,6*2-1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1030
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1031
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1032
        matcher.region(3*2,6*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1033
        matcher.useAnchoringBounds(false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1034
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1035
           failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1036
        report("Regions");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1037
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1038
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1039
    private static void expectRegionFail(Matcher matcher, int index1,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1040
                                         int index2)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1041
    {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1042
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1043
            matcher.region(index1, index2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1044
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1045
        } catch (IndexOutOfBoundsException ioobe) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1046
            // Correct result
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1047
        } catch (IllegalStateException ise) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1048
            // Correct result
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1049
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1050
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1051
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1052
    // This test is for 4803197
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1053
    private static void escapedSegmentTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1054
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1055
        Pattern pattern = Pattern.compile("\\Qdir1\\dir2\\E");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1056
        check(pattern, "dir1\\dir2", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1057
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1058
        pattern = Pattern.compile("\\Qdir1\\dir2\\\\E");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1059
        check(pattern, "dir1\\dir2\\", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1060
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1061
        pattern = Pattern.compile("(\\Qdir1\\dir2\\\\E)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1062
        check(pattern, "dir1\\dir2\\", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1063
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1064
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1065
        pattern = Pattern.compile(toSupplementaries("\\Qdir1\\dir2\\E"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1066
        check(pattern, toSupplementaries("dir1\\dir2"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1067
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1068
        pattern = Pattern.compile(toSupplementaries("\\Qdir1\\dir2")+"\\\\E");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1069
        check(pattern, toSupplementaries("dir1\\dir2\\"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1071
        pattern = Pattern.compile(toSupplementaries("(\\Qdir1\\dir2")+"\\\\E)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1072
        check(pattern, toSupplementaries("dir1\\dir2\\"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1073
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1074
        report("Escaped segment");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1075
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1076
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1077
    // This test is for 4792284
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1078
    private static void nonCaptureRepetitionTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1079
        String input = "abcdefgh;";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1080
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1081
        String[] patterns = new String[] {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1082
            "(?:\\w{4})+;",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1083
            "(?:\\w{8})*;",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1084
            "(?:\\w{2}){2,4};",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1085
            "(?:\\w{4}){2,};",   // only matches the
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1086
            ".*?(?:\\w{5})+;",   //     specified minimum
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1087
            ".*?(?:\\w{9})*;",   //     number of reps - OK
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1088
            "(?:\\w{4})+?;",     // lazy repetition - OK
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1089
            "(?:\\w{4})++;",     // possessive repetition - OK
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1090
            "(?:\\w{2,}?)+;",    // non-deterministic - OK
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1091
            "(\\w{4})+;",        // capturing group - OK
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1092
        };
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1093
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1094
        for (int i = 0; i < patterns.length; i++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1095
            // Check find()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1096
            check(patterns[i], 0, input, input, true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1097
            // Check matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1098
            Pattern p = Pattern.compile(patterns[i]);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1099
            Matcher m = p.matcher(input);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1100
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1101
            if (m.matches()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1102
                if (!m.group(0).equals(input))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1103
                    failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1104
            } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1105
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1106
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1107
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1108
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1109
        report("Non capturing repetition");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1110
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1111
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1112
    // This test is for 6358731
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1113
    private static void notCapturedGroupCurlyMatchTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1114
        Pattern pattern = Pattern.compile("(abc)+|(abcd)+");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1115
        Matcher matcher = pattern.matcher("abcd");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1116
        if (!matcher.matches() ||
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1117
             matcher.group(1) != null ||
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1118
             !matcher.group(2).equals("abcd")) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1119
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1120
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1121
        report("Not captured GroupCurly");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1122
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1123
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1124
    // This test is for 4706545
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1125
    private static void javaCharClassTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1126
        for (int i=0; i<1000; i++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1127
            char c = (char)generator.nextInt();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1128
            check("{javaLowerCase}", c, Character.isLowerCase(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1129
            check("{javaUpperCase}", c, Character.isUpperCase(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1130
            check("{javaUpperCase}+", c, Character.isUpperCase(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1131
            check("{javaTitleCase}", c, Character.isTitleCase(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1132
            check("{javaDigit}", c, Character.isDigit(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1133
            check("{javaDefined}", c, Character.isDefined(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1134
            check("{javaLetter}", c, Character.isLetter(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1135
            check("{javaLetterOrDigit}", c, Character.isLetterOrDigit(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1136
            check("{javaJavaIdentifierStart}", c,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1137
                  Character.isJavaIdentifierStart(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1138
            check("{javaJavaIdentifierPart}", c,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1139
                  Character.isJavaIdentifierPart(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1140
            check("{javaUnicodeIdentifierStart}", c,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1141
                  Character.isUnicodeIdentifierStart(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1142
            check("{javaUnicodeIdentifierPart}", c,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1143
                  Character.isUnicodeIdentifierPart(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1144
            check("{javaIdentifierIgnorable}", c,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1145
                  Character.isIdentifierIgnorable(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1146
            check("{javaSpaceChar}", c, Character.isSpaceChar(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1147
            check("{javaWhitespace}", c, Character.isWhitespace(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1148
            check("{javaISOControl}", c, Character.isISOControl(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1149
            check("{javaMirrored}", c, Character.isMirrored(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1150
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1151
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1152
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1153
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1154
        for (int i=0; i<1000; i++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1155
            int c = generator.nextInt(Character.MAX_CODE_POINT
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1156
                                      - Character.MIN_SUPPLEMENTARY_CODE_POINT)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1157
                        + Character.MIN_SUPPLEMENTARY_CODE_POINT;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1158
            check("{javaLowerCase}", c, Character.isLowerCase(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1159
            check("{javaUpperCase}", c, Character.isUpperCase(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1160
            check("{javaUpperCase}+", c, Character.isUpperCase(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1161
            check("{javaTitleCase}", c, Character.isTitleCase(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1162
            check("{javaDigit}", c, Character.isDigit(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1163
            check("{javaDefined}", c, Character.isDefined(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1164
            check("{javaLetter}", c, Character.isLetter(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1165
            check("{javaLetterOrDigit}", c, Character.isLetterOrDigit(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1166
            check("{javaJavaIdentifierStart}", c,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1167
                  Character.isJavaIdentifierStart(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1168
            check("{javaJavaIdentifierPart}", c,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1169
                  Character.isJavaIdentifierPart(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1170
            check("{javaUnicodeIdentifierStart}", c,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1171
                  Character.isUnicodeIdentifierStart(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1172
            check("{javaUnicodeIdentifierPart}", c,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1173
                  Character.isUnicodeIdentifierPart(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1174
            check("{javaIdentifierIgnorable}", c,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1175
                  Character.isIdentifierIgnorable(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1176
            check("{javaSpaceChar}", c, Character.isSpaceChar(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1177
            check("{javaWhitespace}", c, Character.isWhitespace(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1178
            check("{javaISOControl}", c, Character.isISOControl(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1179
            check("{javaMirrored}", c, Character.isMirrored(c));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1180
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1181
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1182
        report("Java character classes");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1183
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1184
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1185
    // This test is for 4523620
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1186
    /*
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1187
    private static void numOccurrencesTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1188
        Pattern pattern = Pattern.compile("aaa");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1189
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1190
        if (pattern.numOccurrences("aaaaaa", false) != 2)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1191
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1192
        if (pattern.numOccurrences("aaaaaa", true) != 4)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1193
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1194
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1195
        pattern = Pattern.compile("^");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1196
        if (pattern.numOccurrences("aaaaaa", false) != 1)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1197
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1198
        if (pattern.numOccurrences("aaaaaa", true) != 1)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1199
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1200
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1201
        report("Number of Occurrences");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1202
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1203
    */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1204
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1205
    // This test is for 4776374
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1206
    private static void caretBetweenTerminatorsTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1207
        int flags1 = Pattern.DOTALL;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1208
        int flags2 = Pattern.DOTALL | Pattern.UNIX_LINES;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1209
        int flags3 = Pattern.DOTALL | Pattern.UNIX_LINES | Pattern.MULTILINE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1210
        int flags4 = Pattern.DOTALL | Pattern.MULTILINE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1211
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1212
        check("^....", flags1, "test\ntest", "test", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1213
        check(".....^", flags1, "test\ntest", "test", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1214
        check(".....^", flags1, "test\n", "test", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1215
        check("....^", flags1, "test\r\n", "test", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1216
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1217
        check("^....", flags2, "test\ntest", "test", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1218
        check("....^", flags2, "test\ntest", "test", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1219
        check(".....^", flags2, "test\n", "test", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1220
        check("....^", flags2, "test\r\n", "test", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1221
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1222
        check("^....", flags3, "test\ntest", "test", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1223
        check(".....^", flags3, "test\ntest", "test\n", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1224
        check(".....^", flags3, "test\u0085test", "test\u0085", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1225
        check(".....^", flags3, "test\n", "test", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1226
        check(".....^", flags3, "test\r\n", "test", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1227
        check("......^", flags3, "test\r\ntest", "test\r\n", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1228
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1229
        check("^....", flags4, "test\ntest", "test", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1230
        check(".....^", flags3, "test\ntest", "test\n", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1231
        check(".....^", flags4, "test\u0085test", "test\u0085", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1232
        check(".....^", flags4, "test\n", "test\n", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1233
        check(".....^", flags4, "test\r\n", "test\r", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1234
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1235
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1236
        String t = toSupplementaries("test");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1237
        check("^....", flags1, t+"\n"+t, t, true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1238
        check(".....^", flags1, t+"\n"+t, t, false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1239
        check(".....^", flags1, t+"\n", t, false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1240
        check("....^", flags1, t+"\r\n", t, false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1241
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1242
        check("^....", flags2, t+"\n"+t, t, true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1243
        check("....^", flags2, t+"\n"+t, t, false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1244
        check(".....^", flags2, t+"\n", t, false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1245
        check("....^", flags2, t+"\r\n", t, false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1246
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1247
        check("^....", flags3, t+"\n"+t, t, true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1248
        check(".....^", flags3, t+"\n"+t, t+"\n", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1249
        check(".....^", flags3, t+"\u0085"+t, t+"\u0085", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1250
        check(".....^", flags3, t+"\n", t, false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1251
        check(".....^", flags3, t+"\r\n", t, false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1252
        check("......^", flags3, t+"\r\n"+t, t+"\r\n", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1253
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1254
        check("^....", flags4, t+"\n"+t, t, true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1255
        check(".....^", flags3, t+"\n"+t, t+"\n", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1256
        check(".....^", flags4, t+"\u0085"+t, t+"\u0085", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1257
        check(".....^", flags4, t+"\n", t+"\n", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1258
        check(".....^", flags4, t+"\r\n", t+"\r", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1259
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1260
        report("Caret between terminators");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1261
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1262
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1263
    // This test is for 4727935
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1264
    private static void dollarAtEndTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1265
        int flags1 = Pattern.DOTALL;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1266
        int flags2 = Pattern.DOTALL | Pattern.UNIX_LINES;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1267
        int flags3 = Pattern.DOTALL | Pattern.MULTILINE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1268
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1269
        check("....$", flags1, "test\n", "test", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1270
        check("....$", flags1, "test\r\n", "test", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1271
        check(".....$", flags1, "test\n", "test\n", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1272
        check(".....$", flags1, "test\u0085", "test\u0085", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1273
        check("....$", flags1, "test\u0085", "test", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1274
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1275
        check("....$", flags2, "test\n", "test", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1276
        check(".....$", flags2, "test\n", "test\n", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1277
        check(".....$", flags2, "test\u0085", "test\u0085", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1278
        check("....$", flags2, "test\u0085", "est\u0085", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1279
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1280
        check("....$.blah", flags3, "test\nblah", "test\nblah", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1281
        check(".....$.blah", flags3, "test\n\nblah", "test\n\nblah", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1282
        check("....$blah", flags3, "test\nblah", "!!!!", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1283
        check(".....$blah", flags3, "test\nblah", "!!!!", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1284
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1285
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1286
        String t = toSupplementaries("test");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1287
        String b = toSupplementaries("blah");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1288
        check("....$", flags1, t+"\n", t, true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1289
        check("....$", flags1, t+"\r\n", t, true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1290
        check(".....$", flags1, t+"\n", t+"\n", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1291
        check(".....$", flags1, t+"\u0085", t+"\u0085", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1292
        check("....$", flags1, t+"\u0085", t, true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1293
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1294
        check("....$", flags2, t+"\n", t, true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1295
        check(".....$", flags2, t+"\n", t+"\n", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1296
        check(".....$", flags2, t+"\u0085", t+"\u0085", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1297
        check("....$", flags2, t+"\u0085", toSupplementaries("est\u0085"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1298
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1299
        check("....$."+b, flags3, t+"\n"+b, t+"\n"+b, true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1300
        check(".....$."+b, flags3, t+"\n\n"+b, t+"\n\n"+b, true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1301
        check("....$"+b, flags3, t+"\n"+b, "!!!!", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1302
        check(".....$"+b, flags3, t+"\n"+b, "!!!!", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1303
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1304
        report("Dollar at End");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1305
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1306
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1307
    // This test is for 4711773
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1308
    private static void multilineDollarTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1309
        Pattern findCR = Pattern.compile("$", Pattern.MULTILINE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1310
        Matcher matcher = findCR.matcher("first bit\nsecond bit");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1311
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1312
        if (matcher.start(0) != 9)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1313
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1314
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1315
        if (matcher.start(0) != 20)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1316
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1317
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1318
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1319
        matcher = findCR.matcher(toSupplementaries("first  bit\n second  bit")); // double BMP chars
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1320
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1321
        if (matcher.start(0) != 9*2)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1322
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1323
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1324
        if (matcher.start(0) != 20*2)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1325
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1326
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1327
        report("Multiline Dollar");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1328
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1329
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1330
    private static void reluctantRepetitionTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1331
        Pattern p = Pattern.compile("1(\\s\\S+?){1,3}?[\\s,]2");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1332
        check(p, "1 word word word 2", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1333
        check(p, "1 wor wo w 2", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1334
        check(p, "1 word word 2", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1335
        check(p, "1 word 2", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1336
        check(p, "1 wo w w 2", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1337
        check(p, "1 wo w 2", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1338
        check(p, "1 wor w 2", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1339
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1340
        p = Pattern.compile("([a-z])+?c");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1341
        Matcher m = p.matcher("ababcdefdec");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1342
        check(m, "ababc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1343
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1344
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1345
        p = Pattern.compile(toSupplementaries("([a-z])+?c"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1346
        m = p.matcher(toSupplementaries("ababcdefdec"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1347
        check(m, toSupplementaries("ababc"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1348
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1349
        report("Reluctant Repetition");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1350
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1351
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1352
    private static void serializeTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1353
        String patternStr = "(b)";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1354
        String matchStr = "b";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1355
        Pattern pattern = Pattern.compile(patternStr);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1356
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1357
        ObjectOutputStream oos = new ObjectOutputStream(baos);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1358
        oos.writeObject(pattern);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1359
        oos.close();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1360
        ObjectInputStream ois = new ObjectInputStream(
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1361
            new ByteArrayInputStream(baos.toByteArray()));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1362
        Pattern serializedPattern = (Pattern)ois.readObject();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1363
        ois.close();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1364
        Matcher matcher = serializedPattern.matcher(matchStr);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1365
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1366
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1367
        if (matcher.groupCount() != 1)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1368
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1369
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1370
        report("Serialization");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1371
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1372
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1373
    private static void gTest() {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1374
        Pattern pattern = Pattern.compile("\\G\\w");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1375
        Matcher matcher = pattern.matcher("abc#x#x");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1376
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1377
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1378
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1379
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1380
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1381
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1382
        pattern = Pattern.compile("\\GA*");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1383
        matcher = pattern.matcher("1A2AA3");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1384
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1385
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1386
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1387
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1388
        pattern = Pattern.compile("\\GA*");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1389
        matcher = pattern.matcher("1A2AA3");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1390
        if (!matcher.find(1))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1391
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1392
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1393
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1394
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1395
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1396
        report("\\G");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1397
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1398
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1399
    private static void zTest() {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1400
        Pattern pattern = Pattern.compile("foo\\Z");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1401
        // Positives
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1402
        check(pattern, "foo\u0085", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1403
        check(pattern, "foo\u2028", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1404
        check(pattern, "foo\u2029", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1405
        check(pattern, "foo\n", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1406
        check(pattern, "foo\r", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1407
        check(pattern, "foo\r\n", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1408
        // Negatives
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1409
        check(pattern, "fooo", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1410
        check(pattern, "foo\n\r", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1411
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1412
        pattern = Pattern.compile("foo\\Z", Pattern.UNIX_LINES);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1413
        // Positives
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1414
        check(pattern, "foo", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1415
        check(pattern, "foo\n", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1416
        // Negatives
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1417
        check(pattern, "foo\r", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1418
        check(pattern, "foo\u0085", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1419
        check(pattern, "foo\u2028", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1420
        check(pattern, "foo\u2029", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1421
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1422
        report("\\Z");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1423
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1424
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1425
    private static void replaceFirstTest() {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1426
        Pattern pattern = Pattern.compile("(ab)(c*)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1427
        Matcher matcher = pattern.matcher("abccczzzabcczzzabccc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1428
        if (!matcher.replaceFirst("test").equals("testzzzabcczzzabccc"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1429
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1430
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1431
        matcher.reset("zzzabccczzzabcczzzabccczzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1432
        if (!matcher.replaceFirst("test").equals("zzztestzzzabcczzzabccczzz"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1433
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1434
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1435
        matcher.reset("zzzabccczzzabcczzzabccczzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1436
        String result = matcher.replaceFirst("$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1437
        if (!result.equals("zzzabzzzabcczzzabccczzz"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1438
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1439
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1440
        matcher.reset("zzzabccczzzabcczzzabccczzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1441
        result = matcher.replaceFirst("$2");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1442
        if (!result.equals("zzzccczzzabcczzzabccczzz"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1443
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1444
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1445
        pattern = Pattern.compile("a*");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1446
        matcher = pattern.matcher("aaaaaaaaaa");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1447
        if (!matcher.replaceFirst("test").equals("test"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1448
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1449
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1450
        pattern = Pattern.compile("a+");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1451
        matcher = pattern.matcher("zzzaaaaaaaaaa");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1452
        if (!matcher.replaceFirst("test").equals("zzztest"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1453
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1454
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1455
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1456
        pattern = Pattern.compile(toSupplementaries("(ab)(c*)"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1457
        matcher = pattern.matcher(toSupplementaries("abccczzzabcczzzabccc"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1458
        if (!matcher.replaceFirst(toSupplementaries("test"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1459
                .equals(toSupplementaries("testzzzabcczzzabccc")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1460
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1461
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1462
        matcher.reset(toSupplementaries("zzzabccczzzabcczzzabccczzz"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1463
        if (!matcher.replaceFirst(toSupplementaries("test")).
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1464
            equals(toSupplementaries("zzztestzzzabcczzzabccczzz")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1465
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1466
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1467
        matcher.reset(toSupplementaries("zzzabccczzzabcczzzabccczzz"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1468
        result = matcher.replaceFirst("$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1469
        if (!result.equals(toSupplementaries("zzzabzzzabcczzzabccczzz")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1470
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1471
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1472
        matcher.reset(toSupplementaries("zzzabccczzzabcczzzabccczzz"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1473
        result = matcher.replaceFirst("$2");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1474
        if (!result.equals(toSupplementaries("zzzccczzzabcczzzabccczzz")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1475
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1476
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1477
        pattern = Pattern.compile(toSupplementaries("a*"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1478
        matcher = pattern.matcher(toSupplementaries("aaaaaaaaaa"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1479
        if (!matcher.replaceFirst(toSupplementaries("test")).equals(toSupplementaries("test")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1480
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1481
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1482
        pattern = Pattern.compile(toSupplementaries("a+"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1483
        matcher = pattern.matcher(toSupplementaries("zzzaaaaaaaaaa"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1484
        if (!matcher.replaceFirst(toSupplementaries("test")).equals(toSupplementaries("zzztest")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1485
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1486
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1487
        report("Replace First");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1488
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1489
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1490
    private static void unixLinesTest() {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1491
        Pattern pattern = Pattern.compile(".*");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1492
        Matcher matcher = pattern.matcher("aa\u2028blah");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1493
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1494
        if (!matcher.group(0).equals("aa"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1495
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1496
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1497
        pattern = Pattern.compile(".*", Pattern.UNIX_LINES);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1498
        matcher = pattern.matcher("aa\u2028blah");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1499
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1500
        if (!matcher.group(0).equals("aa\u2028blah"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1501
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1502
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1503
        pattern = Pattern.compile("[az]$",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1504
                                  Pattern.MULTILINE | Pattern.UNIX_LINES);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1505
        matcher = pattern.matcher("aa\u2028zz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1506
        check(matcher, "a\u2028", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1507
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1508
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1509
        pattern = Pattern.compile(".*");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1510
        matcher = pattern.matcher(toSupplementaries("aa\u2028blah"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1511
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1512
        if (!matcher.group(0).equals(toSupplementaries("aa")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1513
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1514
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1515
        pattern = Pattern.compile(".*", Pattern.UNIX_LINES);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1516
        matcher = pattern.matcher(toSupplementaries("aa\u2028blah"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1517
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1518
        if (!matcher.group(0).equals(toSupplementaries("aa\u2028blah")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1519
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1520
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1521
        pattern = Pattern.compile(toSupplementaries("[az]$"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1522
                                  Pattern.MULTILINE | Pattern.UNIX_LINES);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1523
        matcher = pattern.matcher(toSupplementaries("aa\u2028zz"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1524
        check(matcher, toSupplementaries("a\u2028"), false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1525
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1526
        report("Unix Lines");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1527
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1528
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1529
    private static void commentsTest() {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1530
        int flags = Pattern.COMMENTS;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1531
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1532
        Pattern pattern = Pattern.compile("aa \\# aa", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1533
        Matcher matcher = pattern.matcher("aa#aa");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1534
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1535
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1536
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1537
        pattern = Pattern.compile("aa  # blah", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1538
        matcher = pattern.matcher("aa");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1539
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1540
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1541
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1542
        pattern = Pattern.compile("aa blah", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1543
        matcher = pattern.matcher("aablah");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1544
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1545
             failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1546
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1547
        pattern = Pattern.compile("aa  # blah blech  ", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1548
        matcher = pattern.matcher("aa");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1549
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1550
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1551
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1552
        pattern = Pattern.compile("aa  # blah\n  ", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1553
        matcher = pattern.matcher("aa");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1554
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1555
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1556
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1557
        pattern = Pattern.compile("aa  # blah\nbc # blech", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1558
        matcher = pattern.matcher("aabc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1559
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1560
             failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1561
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1562
        pattern = Pattern.compile("aa  # blah\nbc# blech", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1563
        matcher = pattern.matcher("aabc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1564
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1565
             failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1566
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1567
        pattern = Pattern.compile("aa  # blah\nbc\\# blech", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1568
        matcher = pattern.matcher("aabc#blech");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1569
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1570
             failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1571
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1572
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1573
        pattern = Pattern.compile(toSupplementaries("aa \\# aa"), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1574
        matcher = pattern.matcher(toSupplementaries("aa#aa"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1575
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1576
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1577
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1578
        pattern = Pattern.compile(toSupplementaries("aa  # blah"), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1579
        matcher = pattern.matcher(toSupplementaries("aa"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1580
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1581
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1582
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1583
        pattern = Pattern.compile(toSupplementaries("aa blah"), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1584
        matcher = pattern.matcher(toSupplementaries("aablah"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1585
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1586
             failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1587
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1588
        pattern = Pattern.compile(toSupplementaries("aa  # blah blech  "), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1589
        matcher = pattern.matcher(toSupplementaries("aa"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1590
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1591
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1592
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1593
        pattern = Pattern.compile(toSupplementaries("aa  # blah\n  "), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1594
        matcher = pattern.matcher(toSupplementaries("aa"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1595
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1596
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1597
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1598
        pattern = Pattern.compile(toSupplementaries("aa  # blah\nbc # blech"), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1599
        matcher = pattern.matcher(toSupplementaries("aabc"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1600
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1601
             failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1602
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1603
        pattern = Pattern.compile(toSupplementaries("aa  # blah\nbc# blech"), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1604
        matcher = pattern.matcher(toSupplementaries("aabc"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1605
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1606
             failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1607
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1608
        pattern = Pattern.compile(toSupplementaries("aa  # blah\nbc\\# blech"), flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1609
        matcher = pattern.matcher(toSupplementaries("aabc#blech"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1610
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1611
             failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1612
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1613
        report("Comments");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1614
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1615
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1616
    private static void caseFoldingTest() { // bug 4504687
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1617
        int flags = Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1618
        Pattern pattern = Pattern.compile("aa", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1619
        Matcher matcher = pattern.matcher("ab");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1620
        if (matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1621
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1622
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1623
        pattern = Pattern.compile("aA", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1624
        matcher = pattern.matcher("ab");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1625
        if (matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1626
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1627
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1628
        pattern = Pattern.compile("aa", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1629
        matcher = pattern.matcher("aB");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1630
        if (matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1631
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1632
        matcher = pattern.matcher("Ab");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1633
        if (matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1634
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1635
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1636
        // ASCII               "a"
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1637
        // Latin-1 Supplement  "a" + grave
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1638
        // Cyrillic            "a"
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1639
        String[] patterns = new String[] {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1640
            //single
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1641
            "a", "\u00e0", "\u0430",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1642
            //slice
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1643
            "ab", "\u00e0\u00e1", "\u0430\u0431",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1644
            //class single
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1645
            "[a]", "[\u00e0]", "[\u0430]",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1646
            //class range
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1647
            "[a-b]", "[\u00e0-\u00e5]", "[\u0430-\u0431]",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1648
            //back reference
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1649
            "(a)\\1", "(\u00e0)\\1", "(\u0430)\\1"
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1650
        };
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1651
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1652
        String[] texts = new String[] {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1653
            "A", "\u00c0", "\u0410",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1654
            "AB", "\u00c0\u00c1", "\u0410\u0411",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1655
            "A", "\u00c0", "\u0410",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1656
            "B", "\u00c2", "\u0411",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1657
            "aA", "\u00e0\u00c0", "\u0430\u0410"
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1658
        };
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1659
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1660
        boolean[] expected = new boolean[] {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1661
            true, false, false,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1662
            true, false, false,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1663
            true, false, false,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1664
            true, false, false,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1665
            true, false, false
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1666
        };
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1667
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1668
        flags = Pattern.CASE_INSENSITIVE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1669
        for (int i = 0; i < patterns.length; i++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1670
            pattern = Pattern.compile(patterns[i], flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1671
            matcher = pattern.matcher(texts[i]);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1672
            if (matcher.matches() != expected[i]) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1673
                System.out.println("<1> Failed at " + i);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1674
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1675
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1676
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1677
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1678
        flags = Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1679
        for (int i = 0; i < patterns.length; i++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1680
            pattern = Pattern.compile(patterns[i], flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1681
            matcher = pattern.matcher(texts[i]);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1682
            if (!matcher.matches()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1683
                System.out.println("<2> Failed at " + i);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1684
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1685
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1686
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1687
        // flag unicode_case alone should do nothing
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1688
        flags = Pattern.UNICODE_CASE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1689
        for (int i = 0; i < patterns.length; i++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1690
            pattern = Pattern.compile(patterns[i], flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1691
            matcher = pattern.matcher(texts[i]);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1692
            if (matcher.matches()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1693
                System.out.println("<3> Failed at " + i);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1694
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1695
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1696
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1697
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1698
        // Special cases: i, I, u+0131 and u+0130
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1699
        flags = Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1700
        pattern = Pattern.compile("[h-j]+", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1701
        if (!pattern.matcher("\u0131\u0130").matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1702
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1703
        report("Case Folding");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1704
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1705
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1706
    private static void appendTest() {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1707
        Pattern pattern = Pattern.compile("(ab)(cd)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1708
        Matcher matcher = pattern.matcher("abcd");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1709
        String result = matcher.replaceAll("$2$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1710
        if (!result.equals("cdab"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1711
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1712
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1713
        String  s1 = "Swap all: first = 123, second = 456";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1714
        String  s2 = "Swap one: first = 123, second = 456";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1715
        String  r  = "$3$2$1";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1716
        pattern = Pattern.compile("([a-z]+)( *= *)([0-9]+)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1717
        matcher = pattern.matcher(s1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1718
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1719
        result = matcher.replaceAll(r);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1720
        if (!result.equals("Swap all: 123 = first, 456 = second"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1721
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1722
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1723
        matcher = pattern.matcher(s2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1724
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1725
        if (matcher.find()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1726
            StringBuffer sb = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1727
            matcher.appendReplacement(sb, r);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1728
            matcher.appendTail(sb);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1729
            result = sb.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1730
            if (!result.equals("Swap one: 123 = first, second = 456"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1731
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1732
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1733
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1734
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1735
        pattern = Pattern.compile(toSupplementaries("(ab)(cd)"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1736
        matcher = pattern.matcher(toSupplementaries("abcd"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1737
        result = matcher.replaceAll("$2$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1738
        if (!result.equals(toSupplementaries("cdab")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1739
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1740
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1741
        s1 = toSupplementaries("Swap all: first = 123, second = 456");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1742
        s2 = toSupplementaries("Swap one: first = 123, second = 456");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1743
        r  = toSupplementaries("$3$2$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1744
        pattern = Pattern.compile(toSupplementaries("([a-z]+)( *= *)([0-9]+)"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1745
        matcher = pattern.matcher(s1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1746
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1747
        result = matcher.replaceAll(r);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1748
        if (!result.equals(toSupplementaries("Swap all: 123 = first, 456 = second")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1749
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1750
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1751
        matcher = pattern.matcher(s2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1752
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1753
        if (matcher.find()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1754
            StringBuffer sb = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1755
            matcher.appendReplacement(sb, r);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1756
            matcher.appendTail(sb);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1757
            result = sb.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1758
            if (!result.equals(toSupplementaries("Swap one: 123 = first, second = 456")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1759
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1760
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1761
        report("Append");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1762
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1763
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1764
    private static void splitTest() {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1765
        Pattern pattern = Pattern.compile(":");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1766
        String[] result = pattern.split("foo:and:boo", 2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1767
        if (!result[0].equals("foo"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1768
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1769
        if (!result[1].equals("and:boo"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1770
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1771
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1772
        Pattern patternX = Pattern.compile(toSupplementaries("X"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1773
        result = patternX.split(toSupplementaries("fooXandXboo"), 2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1774
        if (!result[0].equals(toSupplementaries("foo")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1775
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1776
        if (!result[1].equals(toSupplementaries("andXboo")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1777
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1778
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1779
        CharBuffer cb = CharBuffer.allocate(100);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1780
        cb.put("foo:and:boo");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1781
        cb.flip();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1782
        result = pattern.split(cb);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1783
        if (!result[0].equals("foo"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1784
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1785
        if (!result[1].equals("and"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1786
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1787
        if (!result[2].equals("boo"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1788
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1789
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1790
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1791
        CharBuffer cbs = CharBuffer.allocate(100);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1792
        cbs.put(toSupplementaries("fooXandXboo"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1793
        cbs.flip();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1794
        result = patternX.split(cbs);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1795
        if (!result[0].equals(toSupplementaries("foo")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1796
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1797
        if (!result[1].equals(toSupplementaries("and")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1798
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1799
        if (!result[2].equals(toSupplementaries("boo")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1800
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1801
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1802
        String source = "0123456789";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1803
        for (int limit=-2; limit<3; limit++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1804
            for (int x=0; x<10; x++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1805
                result = source.split(Integer.toString(x), limit);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1806
                int expectedLength = limit < 1 ? 2 : limit;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1807
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1808
                if ((limit == 0) && (x == 9)) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1809
                    // expected dropping of ""
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1810
                    if (result.length != 1)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1811
                        failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1812
                    if (!result[0].equals("012345678")) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1813
                        failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1814
                    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1815
                } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1816
                    if (result.length != expectedLength) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1817
                        failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1818
                    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1819
                    if (!result[0].equals(source.substring(0,x))) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1820
                        if (limit != 1) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1821
                            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1822
                        } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1823
                            if (!result[0].equals(source.substring(0,10))) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1824
                                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1825
                            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1826
                        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1827
                    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1828
                    if (expectedLength > 1) { // Check segment 2
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1829
                        if (!result[1].equals(source.substring(x+1,10)))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1830
                            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1831
                    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1832
                }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1833
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1834
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1835
        // Check the case for no match found
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1836
        for (int limit=-2; limit<3; limit++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1837
            result = source.split("e", limit);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1838
            if (result.length != 1)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1839
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1840
            if (!result[0].equals(source))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1841
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1842
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1843
        // Check the case for limit == 0, source = "";
21668
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1844
        // split() now returns 0-length for empty source "" see #6559590
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1845
        source = "";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1846
        result = source.split("e", 0);
21670
ca3553133ede 8028321: Fix for String.split() empty input sequence/JDK-6559590 triggers regression
sherman
parents: 21668
diff changeset
  1847
        if (result.length != 1)
ca3553133ede 8028321: Fix for String.split() empty input sequence/JDK-6559590 triggers regression
sherman
parents: 21668
diff changeset
  1848
            failCount++;
ca3553133ede 8028321: Fix for String.split() empty input sequence/JDK-6559590 triggers regression
sherman
parents: 21668
diff changeset
  1849
        if (!result[0].equals(source))
21668
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1850
            failCount++;
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1851
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1852
        // Check both split() and splitAsStraem(), especially for zero-lenth
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1853
        // input and zero-lenth match cases
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1854
        String[][] input = new String[][] {
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1855
            { " ",           "Abc Efg Hij" },   // normal non-zero-match
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1856
            { " ",           " Abc Efg Hij" },  // leading empty str for non-zero-match
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1857
            { " ",           "Abc  Efg Hij" },  // non-zero-match in the middle
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1858
            { "(?=\\p{Lu})", "AbcEfgHij" },     // no leading empty str for zero-match
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1859
            { "(?=\\p{Lu})", "AbcEfg" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1860
            { "(?=\\p{Lu})", "Abc" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1861
            { " ",           "" },              // zero-length input
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1862
            { ".*",          "" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1863
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1864
            // some tests from PatternStreamTest.java
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1865
            { "4",       "awgqwefg1fefw4vssv1vvv1" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1866
            { "\u00a3a", "afbfq\u00a3abgwgb\u00a3awngnwggw\u00a3a\u00a3ahjrnhneerh" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1867
            { "1",       "awgqwefg1fefw4vssv1vvv1" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1868
            { "1",       "a\u4ebafg1fefw\u4eba4\u9f9cvssv\u9f9c1v\u672c\u672cvv" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1869
            { "\u56da",  "1\u56da23\u56da456\u56da7890" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1870
            { "\u56da",  "1\u56da23\u9f9c\u672c\u672c\u56da456\u56da\u9f9c\u672c7890" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1871
            { "\u56da",  "" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1872
            { "[ \t,:.]","This is,testing: with\tdifferent separators." }, //multiple septs
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1873
            { "o",       "boo:and:foo" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1874
            { "o",       "booooo:and:fooooo" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1875
            { "o",       "fooooo:" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1876
        };
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1877
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1878
        String[][] expected = new String[][] {
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1879
            { "Abc", "Efg", "Hij" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1880
            { "", "Abc", "Efg", "Hij" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1881
            { "Abc", "", "Efg", "Hij" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1882
            { "Abc", "Efg", "Hij" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1883
            { "Abc", "Efg" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1884
            { "Abc" },
21670
ca3553133ede 8028321: Fix for String.split() empty input sequence/JDK-6559590 triggers regression
sherman
parents: 21668
diff changeset
  1885
            { "" },
ca3553133ede 8028321: Fix for String.split() empty input sequence/JDK-6559590 triggers regression
sherman
parents: 21668
diff changeset
  1886
            { "" },
21668
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1887
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1888
            { "awgqwefg1fefw", "vssv1vvv1" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1889
            { "afbfq", "bgwgb", "wngnwggw", "", "hjrnhneerh" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1890
            { "awgqwefg", "fefw4vssv", "vvv" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1891
            { "a\u4ebafg", "fefw\u4eba4\u9f9cvssv\u9f9c", "v\u672c\u672cvv" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1892
            { "1", "23", "456", "7890" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1893
            { "1", "23\u9f9c\u672c\u672c", "456", "\u9f9c\u672c7890" },
21670
ca3553133ede 8028321: Fix for String.split() empty input sequence/JDK-6559590 triggers regression
sherman
parents: 21668
diff changeset
  1894
            { "" },
21668
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1895
            { "This", "is", "testing", "", "with", "different", "separators" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1896
            { "b", "", ":and:f" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1897
            { "b", "", "", "", "", ":and:f" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1898
            { "f", "", "", "", "", ":" },
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1899
        };
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1900
        for (int i = 0; i < input.length; i++) {
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1901
            pattern = Pattern.compile(input[i][0]);
21670
ca3553133ede 8028321: Fix for String.split() empty input sequence/JDK-6559590 triggers regression
sherman
parents: 21668
diff changeset
  1902
            if (!Arrays.equals(pattern.split(input[i][1]), expected[i])) {
21668
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1903
                failCount++;
21670
ca3553133ede 8028321: Fix for String.split() empty input sequence/JDK-6559590 triggers regression
sherman
parents: 21668
diff changeset
  1904
            }
ca3553133ede 8028321: Fix for String.split() empty input sequence/JDK-6559590 triggers regression
sherman
parents: 21668
diff changeset
  1905
            if (input[i][1].length() > 0 &&  // splitAsStream() return empty resulting
ca3553133ede 8028321: Fix for String.split() empty input sequence/JDK-6559590 triggers regression
sherman
parents: 21668
diff changeset
  1906
                                             // array for zero-length input for now
ca3553133ede 8028321: Fix for String.split() empty input sequence/JDK-6559590 triggers regression
sherman
parents: 21668
diff changeset
  1907
                !Arrays.equals(pattern.splitAsStream(input[i][1]).toArray(),
ca3553133ede 8028321: Fix for String.split() empty input sequence/JDK-6559590 triggers regression
sherman
parents: 21668
diff changeset
  1908
                               expected[i])) {
21668
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1909
                failCount++;
21670
ca3553133ede 8028321: Fix for String.split() empty input sequence/JDK-6559590 triggers regression
sherman
parents: 21668
diff changeset
  1910
            }
21668
b62ce4a9635f 8027645: Pattern.split() with positive lookahead
sherman
parents: 19604
diff changeset
  1911
        }
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1912
        report("Split");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1913
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1914
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1915
    private static void negationTest() {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1916
        Pattern pattern = Pattern.compile("[\\[@^]+");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1917
        Matcher matcher = pattern.matcher("@@@@[[[[^^^^");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1918
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1919
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1920
        if (!matcher.group(0).equals("@@@@[[[[^^^^"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1921
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1922
        pattern = Pattern.compile("[@\\[^]+");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1923
        matcher = pattern.matcher("@@@@[[[[^^^^");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1924
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1925
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1926
        if (!matcher.group(0).equals("@@@@[[[[^^^^"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1927
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1928
        pattern = Pattern.compile("[@\\[^@]+");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1929
        matcher = pattern.matcher("@@@@[[[[^^^^");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1930
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1931
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1932
        if (!matcher.group(0).equals("@@@@[[[[^^^^"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1933
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1934
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1935
        pattern = Pattern.compile("\\)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1936
        matcher = pattern.matcher("xxx)xxx");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1937
        if (!matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1938
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1939
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1940
        report("Negation");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1941
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1942
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1943
    private static void ampersandTest() {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1944
        Pattern pattern = Pattern.compile("[&@]+");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1945
        check(pattern, "@@@@&&&&", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1946
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1947
        pattern = Pattern.compile("[@&]+");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1948
        check(pattern, "@@@@&&&&", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1949
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1950
        pattern = Pattern.compile("[@\\&]+");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1951
        check(pattern, "@@@@&&&&", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1952
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1953
        report("Ampersand");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1954
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1955
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1956
    private static void octalTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1957
        Pattern pattern = Pattern.compile("\\u0007");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1958
        Matcher matcher = pattern.matcher("\u0007");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1959
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1960
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1961
        pattern = Pattern.compile("\\07");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1962
        matcher = pattern.matcher("\u0007");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1963
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1964
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1965
        pattern = Pattern.compile("\\007");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1966
        matcher = pattern.matcher("\u0007");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1967
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1968
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1969
        pattern = Pattern.compile("\\0007");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1970
        matcher = pattern.matcher("\u0007");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1971
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1972
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1973
        pattern = Pattern.compile("\\040");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1974
        matcher = pattern.matcher("\u0020");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1975
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1976
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1977
        pattern = Pattern.compile("\\0403");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1978
        matcher = pattern.matcher("\u00203");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1979
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1980
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1981
        pattern = Pattern.compile("\\0103");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1982
        matcher = pattern.matcher("\u0043");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1983
        if (!matcher.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1984
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1985
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1986
        report("Octal");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1987
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1988
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1989
    private static void longPatternTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1990
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1991
            Pattern pattern = Pattern.compile(
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1992
                "a 32-character-long pattern xxxx");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1993
            pattern = Pattern.compile("a 33-character-long pattern xxxxx");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1994
            pattern = Pattern.compile("a thirty four character long regex");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1995
            StringBuffer patternToBe = new StringBuffer(101);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1996
            for (int i=0; i<100; i++)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1997
                patternToBe.append((char)(97 + i%26));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1998
            pattern = Pattern.compile(patternToBe.toString());
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  1999
        } catch (PatternSyntaxException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2000
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2001
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2002
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2003
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2004
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2005
            Pattern pattern = Pattern.compile(
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2006
                toSupplementaries("a 32-character-long pattern xxxx"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2007
            pattern = Pattern.compile(toSupplementaries("a 33-character-long pattern xxxxx"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2008
            pattern = Pattern.compile(toSupplementaries("a thirty four character long regex"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2009
            StringBuffer patternToBe = new StringBuffer(101*2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2010
            for (int i=0; i<100; i++)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2011
                patternToBe.append(Character.toChars(Character.MIN_SUPPLEMENTARY_CODE_POINT
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2012
                                                     + 97 + i%26));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2013
            pattern = Pattern.compile(patternToBe.toString());
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2014
        } catch (PatternSyntaxException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2015
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2016
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2017
        report("LongPattern");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2018
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2019
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2020
    private static void group0Test() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2021
        Pattern pattern = Pattern.compile("(tes)ting");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2022
        Matcher matcher = pattern.matcher("testing");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2023
        check(matcher, "testing");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2024
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2025
        matcher.reset("testing");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2026
        if (matcher.lookingAt()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2027
            if (!matcher.group(0).equals("testing"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2028
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2029
        } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2030
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2031
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2032
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2033
        matcher.reset("testing");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2034
        if (matcher.matches()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2035
            if (!matcher.group(0).equals("testing"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2036
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2037
        } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2038
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2039
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2040
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2041
        pattern = Pattern.compile("(tes)ting");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2042
        matcher = pattern.matcher("testing");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2043
        if (matcher.lookingAt()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2044
            if (!matcher.group(0).equals("testing"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2045
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2046
        } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2047
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2048
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2049
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2050
        pattern = Pattern.compile("^(tes)ting");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2051
        matcher = pattern.matcher("testing");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2052
        if (matcher.matches()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2053
            if (!matcher.group(0).equals("testing"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2054
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2055
        } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2056
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2057
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2058
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2059
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2060
        pattern = Pattern.compile(toSupplementaries("(tes)ting"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2061
        matcher = pattern.matcher(toSupplementaries("testing"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2062
        check(matcher, toSupplementaries("testing"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2063
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2064
        matcher.reset(toSupplementaries("testing"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2065
        if (matcher.lookingAt()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2066
            if (!matcher.group(0).equals(toSupplementaries("testing")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2067
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2068
        } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2069
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2070
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2071
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2072
        matcher.reset(toSupplementaries("testing"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2073
        if (matcher.matches()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2074
            if (!matcher.group(0).equals(toSupplementaries("testing")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2075
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2076
        } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2077
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2078
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2079
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2080
        pattern = Pattern.compile(toSupplementaries("(tes)ting"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2081
        matcher = pattern.matcher(toSupplementaries("testing"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2082
        if (matcher.lookingAt()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2083
            if (!matcher.group(0).equals(toSupplementaries("testing")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2084
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2085
        } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2086
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2087
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2088
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2089
        pattern = Pattern.compile(toSupplementaries("^(tes)ting"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2090
        matcher = pattern.matcher(toSupplementaries("testing"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2091
        if (matcher.matches()) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2092
            if (!matcher.group(0).equals(toSupplementaries("testing")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2093
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2094
        } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2095
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2096
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2097
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2098
        report("Group0");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2099
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2100
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2101
    private static void findIntTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2102
        Pattern p = Pattern.compile("blah");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2103
        Matcher m = p.matcher("zzzzblahzzzzzblah");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2104
        boolean result = m.find(2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2105
        if (!result)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2106
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2107
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2108
        p = Pattern.compile("$");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2109
        m = p.matcher("1234567890");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2110
        result = m.find(10);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2111
        if (!result)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2112
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2113
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2114
            result = m.find(11);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2115
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2116
        } catch (IndexOutOfBoundsException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2117
            // correct result
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2118
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2119
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2120
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2121
        p = Pattern.compile(toSupplementaries("blah"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2122
        m = p.matcher(toSupplementaries("zzzzblahzzzzzblah"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2123
        result = m.find(2);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2124
        if (!result)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2125
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2126
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2127
        report("FindInt");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2128
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2129
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2130
    private static void emptyPatternTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2131
        Pattern p = Pattern.compile("");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2132
        Matcher m = p.matcher("foo");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2133
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2134
        // Should find empty pattern at beginning of input
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2135
        boolean result = m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2136
        if (result != true)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2137
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2138
        if (m.start() != 0)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2139
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2140
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2141
        // Should not match entire input if input is not empty
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2142
        m.reset();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2143
        result = m.matches();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2144
        if (result == true)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2145
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2146
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2147
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2148
            m.start(0);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2149
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2150
        } catch (IllegalStateException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2151
            // Correct result
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2152
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2153
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2154
        // Should match entire input if input is empty
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2155
        m.reset("");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2156
        result = m.matches();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2157
        if (result != true)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2158
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2159
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2160
        result = Pattern.matches("", "");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2161
        if (result != true)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2162
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2163
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2164
        result = Pattern.matches("", "foo");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2165
        if (result == true)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2166
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2167
        report("EmptyPattern");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2168
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2169
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2170
    private static void charClassTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2171
        Pattern pattern = Pattern.compile("blah[ab]]blech");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2172
        check(pattern, "blahb]blech", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2173
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2174
        pattern = Pattern.compile("[abc[def]]");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2175
        check(pattern, "b", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2176
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2177
        // Supplementary character tests
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2178
        pattern = Pattern.compile(toSupplementaries("blah[ab]]blech"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2179
        check(pattern, toSupplementaries("blahb]blech"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2180
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2181
        pattern = Pattern.compile(toSupplementaries("[abc[def]]"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2182
        check(pattern, toSupplementaries("b"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2183
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2184
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2185
            // u00ff when UNICODE_CASE
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2186
            pattern = Pattern.compile("[ab\u00ffcd]",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2187
                                      Pattern.CASE_INSENSITIVE|
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2188
                                      Pattern.UNICODE_CASE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2189
            check(pattern, "ab\u00ffcd", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2190
            check(pattern, "Ab\u0178Cd", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2191
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2192
            // u00b5 when UNICODE_CASE
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2193
            pattern = Pattern.compile("[ab\u00b5cd]",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2194
                                      Pattern.CASE_INSENSITIVE|
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2195
                                      Pattern.UNICODE_CASE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2196
            check(pattern, "ab\u00b5cd", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2197
            check(pattern, "Ab\u039cCd", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2198
        } catch (Exception e) { failCount++; }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2199
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2200
        /* Special cases
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2201
           (1)LatinSmallLetterLongS u+017f
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2202
           (2)LatinSmallLetterDotlessI u+0131
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2203
           (3)LatineCapitalLetterIWithDotAbove u+0130
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2204
           (4)KelvinSign u+212a
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2205
           (5)AngstromSign u+212b
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2206
        */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2207
        int flags = Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2208
        pattern = Pattern.compile("[sik\u00c5]+", flags);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2209
        if (!pattern.matcher("\u017f\u0130\u0131\u212a\u212b").matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2210
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2211
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2212
        report("CharClass");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2213
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2214
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2215
    private static void caretTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2216
        Pattern pattern = Pattern.compile("\\w*");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2217
        Matcher matcher = pattern.matcher("a#bc#def##g");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2218
        check(matcher, "a");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2219
        check(matcher, "");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2220
        check(matcher, "bc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2221
        check(matcher, "");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2222
        check(matcher, "def");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2223
        check(matcher, "");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2224
        check(matcher, "");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2225
        check(matcher, "g");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2226
        check(matcher, "");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2227
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2228
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2229
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2230
        pattern = Pattern.compile("^\\w*");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2231
        matcher = pattern.matcher("a#bc#def##g");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2232
        check(matcher, "a");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2233
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2234
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2235
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2236
        pattern = Pattern.compile("\\w");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2237
        matcher = pattern.matcher("abc##x");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2238
        check(matcher, "a");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2239
        check(matcher, "b");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2240
        check(matcher, "c");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2241
        check(matcher, "x");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2242
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2243
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2244
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2245
        pattern = Pattern.compile("^\\w");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2246
        matcher = pattern.matcher("abc##x");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2247
        check(matcher, "a");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2248
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2249
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2250
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2251
        pattern = Pattern.compile("\\A\\p{Alpha}{3}");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2252
        matcher = pattern.matcher("abcdef-ghi\njklmno");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2253
        check(matcher, "abc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2254
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2255
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2256
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2257
        pattern = Pattern.compile("^\\p{Alpha}{3}", Pattern.MULTILINE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2258
        matcher = pattern.matcher("abcdef-ghi\njklmno");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2259
        check(matcher, "abc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2260
        check(matcher, "jkl");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2261
        if (matcher.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2262
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2263
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2264
        pattern = Pattern.compile("^", Pattern.MULTILINE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2265
        matcher = pattern.matcher("this is some text");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2266
        String result = matcher.replaceAll("X");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2267
        if (!result.equals("Xthis is some text"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2268
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2269
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2270
        pattern = Pattern.compile("^");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2271
        matcher = pattern.matcher("this is some text");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2272
        result = matcher.replaceAll("X");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2273
        if (!result.equals("Xthis is some text"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2274
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2275
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2276
        pattern = Pattern.compile("^", Pattern.MULTILINE | Pattern.UNIX_LINES);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2277
        matcher = pattern.matcher("this is some text\n");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2278
        result = matcher.replaceAll("X");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2279
        if (!result.equals("Xthis is some text\n"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2280
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2281
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2282
        report("Caret");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2283
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2284
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2285
    private static void groupCaptureTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2286
        // Independent group
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2287
        Pattern pattern = Pattern.compile("x+(?>y+)z+");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2288
        Matcher matcher = pattern.matcher("xxxyyyzzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2289
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2290
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2291
            String blah = matcher.group(1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2292
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2293
        } catch (IndexOutOfBoundsException ioobe) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2294
            // Good result
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2295
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2296
        // Pure group
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2297
        pattern = Pattern.compile("x+(?:y+)z+");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2298
        matcher = pattern.matcher("xxxyyyzzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2299
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2300
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2301
            String blah = matcher.group(1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2302
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2303
        } catch (IndexOutOfBoundsException ioobe) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2304
            // Good result
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2305
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2306
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2307
        // Supplementary character tests
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2308
        // Independent group
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2309
        pattern = Pattern.compile(toSupplementaries("x+(?>y+)z+"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2310
        matcher = pattern.matcher(toSupplementaries("xxxyyyzzz"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2311
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2312
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2313
            String blah = matcher.group(1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2314
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2315
        } catch (IndexOutOfBoundsException ioobe) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2316
            // Good result
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2317
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2318
        // Pure group
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2319
        pattern = Pattern.compile(toSupplementaries("x+(?:y+)z+"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2320
        matcher = pattern.matcher(toSupplementaries("xxxyyyzzz"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2321
        matcher.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2322
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2323
            String blah = matcher.group(1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2324
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2325
        } catch (IndexOutOfBoundsException ioobe) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2326
            // Good result
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2327
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2328
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2329
        report("GroupCapture");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2330
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2331
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2332
    private static void backRefTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2333
        Pattern pattern = Pattern.compile("(a*)bc\\1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2334
        check(pattern, "zzzaabcazzz", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2335
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2336
        pattern = Pattern.compile("(a*)bc\\1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2337
        check(pattern, "zzzaabcaazzz", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2338
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2339
        pattern = Pattern.compile("(abc)(def)\\1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2340
        check(pattern, "abcdefabc", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2341
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2342
        pattern = Pattern.compile("(abc)(def)\\3");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2343
        check(pattern, "abcdefabc", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2344
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2345
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2346
            for (int i = 1; i < 10; i++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2347
                // Make sure backref 1-9 are always accepted
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2348
                pattern = Pattern.compile("abcdef\\" + i);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2349
                // and fail to match if the target group does not exit
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2350
                check(pattern, "abcdef", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2351
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2352
        } catch(PatternSyntaxException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2353
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2354
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2355
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2356
        pattern = Pattern.compile("(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)\\11");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2357
        check(pattern, "abcdefghija", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2358
        check(pattern, "abcdefghija1", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2359
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2360
        pattern = Pattern.compile("(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2361
        check(pattern, "abcdefghijkk", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2362
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2363
        pattern = Pattern.compile("(a)bcdefghij\\11");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2364
        check(pattern, "abcdefghija1", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2365
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2366
        // Supplementary character tests
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2367
        pattern = Pattern.compile(toSupplementaries("(a*)bc\\1"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2368
        check(pattern, toSupplementaries("zzzaabcazzz"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2369
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2370
        pattern = Pattern.compile(toSupplementaries("(a*)bc\\1"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2371
        check(pattern, toSupplementaries("zzzaabcaazzz"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2372
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2373
        pattern = Pattern.compile(toSupplementaries("(abc)(def)\\1"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2374
        check(pattern, toSupplementaries("abcdefabc"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2375
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2376
        pattern = Pattern.compile(toSupplementaries("(abc)(def)\\3"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2377
        check(pattern, toSupplementaries("abcdefabc"), false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2378
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2379
        pattern = Pattern.compile(toSupplementaries("(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)\\11"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2380
        check(pattern, toSupplementaries("abcdefghija"), false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2381
        check(pattern, toSupplementaries("abcdefghija1"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2382
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2383
        pattern = Pattern.compile(toSupplementaries("(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2384
        check(pattern, toSupplementaries("abcdefghijkk"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2385
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2386
        report("BackRef");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2387
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2388
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2389
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2390
     * Unicode Technical Report #18, section 2.6 End of Line
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2391
     * There is no empty line to be matched in the sequence \u000D\u000A
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2392
     * but there is an empty line in the sequence \u000A\u000D.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2393
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2394
    private static void anchorTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2395
        Pattern p = Pattern.compile("^.*$", Pattern.MULTILINE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2396
        Matcher m = p.matcher("blah1\r\nblah2");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2397
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2398
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2399
        if (!m.group().equals("blah2"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2400
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2401
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2402
        m.reset("blah1\n\rblah2");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2403
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2404
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2405
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2406
        if (!m.group().equals("blah2"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2407
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2408
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2409
        // Test behavior of $ with \r\n at end of input
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2410
        p = Pattern.compile(".+$");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2411
        m = p.matcher("blah1\r\n");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2412
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2413
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2414
       if (!m.group().equals("blah1"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2415
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2416
        if (m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2417
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2418
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2419
        // Test behavior of $ with \r\n at end of input in multiline
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2420
        p = Pattern.compile(".+$", Pattern.MULTILINE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2421
        m = p.matcher("blah1\r\n");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2422
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2423
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2424
        if (m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2425
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2426
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2427
        // Test for $ recognition of \u0085 for bug 4527731
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2428
        p = Pattern.compile(".+$", Pattern.MULTILINE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2429
        m = p.matcher("blah1\u0085");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2430
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2431
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2432
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2433
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2434
        p = Pattern.compile("^.*$", Pattern.MULTILINE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2435
        m = p.matcher(toSupplementaries("blah1\r\nblah2"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2436
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2437
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2438
        if (!m.group().equals(toSupplementaries("blah2")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2439
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2440
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2441
        m.reset(toSupplementaries("blah1\n\rblah2"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2442
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2443
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2444
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2445
        if (!m.group().equals(toSupplementaries("blah2")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2446
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2447
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2448
        // Test behavior of $ with \r\n at end of input
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2449
        p = Pattern.compile(".+$");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2450
        m = p.matcher(toSupplementaries("blah1\r\n"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2451
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2452
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2453
        if (!m.group().equals(toSupplementaries("blah1")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2454
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2455
        if (m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2456
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2457
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2458
        // Test behavior of $ with \r\n at end of input in multiline
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2459
        p = Pattern.compile(".+$", Pattern.MULTILINE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2460
        m = p.matcher(toSupplementaries("blah1\r\n"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2461
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2462
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2463
        if (m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2464
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2465
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2466
        // Test for $ recognition of \u0085 for bug 4527731
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2467
        p = Pattern.compile(".+$", Pattern.MULTILINE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2468
        m = p.matcher(toSupplementaries("blah1\u0085"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2469
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2470
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2471
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2472
        report("Anchors");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2473
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2474
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2475
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2476
     * A basic sanity test of Matcher.lookingAt().
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2477
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2478
    private static void lookingAtTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2479
        Pattern p = Pattern.compile("(ab)(c*)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2480
        Matcher m = p.matcher("abccczzzabcczzzabccc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2481
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2482
        if (!m.lookingAt())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2483
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2484
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2485
        if (!m.group().equals(m.group(0)))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2486
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2487
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2488
        m = p.matcher("zzzabccczzzabcczzzabccczzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2489
        if (m.lookingAt())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2490
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2491
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2492
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2493
        p = Pattern.compile(toSupplementaries("(ab)(c*)"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2494
        m = p.matcher(toSupplementaries("abccczzzabcczzzabccc"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2495
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2496
        if (!m.lookingAt())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2497
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2498
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2499
        if (!m.group().equals(m.group(0)))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2500
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2501
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2502
        m = p.matcher(toSupplementaries("zzzabccczzzabcczzzabccczzz"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2503
        if (m.lookingAt())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2504
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2505
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2506
        report("Looking At");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2507
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2508
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2509
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2510
     * A basic sanity test of Matcher.matches().
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2511
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2512
    private static void matchesTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2513
        // matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2514
        Pattern p = Pattern.compile("ulb(c*)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2515
        Matcher m = p.matcher("ulbcccccc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2516
        if (!m.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2517
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2518
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2519
        // find() but not matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2520
        m.reset("zzzulbcccccc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2521
        if (m.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2522
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2523
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2524
        // lookingAt() but not matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2525
        m.reset("ulbccccccdef");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2526
        if (m.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2527
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2528
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2529
        // matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2530
        p = Pattern.compile("a|ad");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2531
        m = p.matcher("ad");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2532
        if (!m.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2533
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2534
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2535
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2536
        // matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2537
        p = Pattern.compile(toSupplementaries("ulb(c*)"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2538
        m = p.matcher(toSupplementaries("ulbcccccc"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2539
        if (!m.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2540
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2541
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2542
        // find() but not matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2543
        m.reset(toSupplementaries("zzzulbcccccc"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2544
        if (m.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2545
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2546
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2547
        // lookingAt() but not matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2548
        m.reset(toSupplementaries("ulbccccccdef"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2549
        if (m.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2550
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2551
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2552
        // matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2553
        p = Pattern.compile(toSupplementaries("a|ad"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2554
        m = p.matcher(toSupplementaries("ad"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2555
        if (!m.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2556
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2557
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2558
        report("Matches");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2559
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2560
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2561
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2562
     * A basic sanity test of Pattern.matches().
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2563
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2564
    private static void patternMatchesTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2565
        // matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2566
        if (!Pattern.matches(toSupplementaries("ulb(c*)"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2567
                             toSupplementaries("ulbcccccc")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2568
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2569
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2570
        // find() but not matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2571
        if (Pattern.matches(toSupplementaries("ulb(c*)"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2572
                            toSupplementaries("zzzulbcccccc")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2573
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2574
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2575
        // lookingAt() but not matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2576
        if (Pattern.matches(toSupplementaries("ulb(c*)"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2577
                            toSupplementaries("ulbccccccdef")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2578
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2579
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2580
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2581
        // matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2582
        if (!Pattern.matches(toSupplementaries("ulb(c*)"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2583
                             toSupplementaries("ulbcccccc")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2584
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2585
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2586
        // find() but not matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2587
        if (Pattern.matches(toSupplementaries("ulb(c*)"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2588
                            toSupplementaries("zzzulbcccccc")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2589
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2590
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2591
        // lookingAt() but not matches()
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2592
        if (Pattern.matches(toSupplementaries("ulb(c*)"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2593
                            toSupplementaries("ulbccccccdef")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2594
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2595
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2596
        report("Pattern Matches");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2597
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2598
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2599
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2600
     * Canonical equivalence testing. Tests the ability of the engine
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2601
     * to match sequences that are not explicitly specified in the
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2602
     * pattern when they are considered equivalent by the Unicode Standard.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2603
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2604
    private static void ceTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2605
        // Decomposed char outside char classes
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2606
        Pattern p = Pattern.compile("testa\u030a", Pattern.CANON_EQ);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2607
        Matcher m = p.matcher("test\u00e5");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2608
        if (!m.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2609
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2610
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2611
        m.reset("testa\u030a");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2612
        if (!m.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2613
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2614
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2615
        // Composed char outside char classes
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2616
        p = Pattern.compile("test\u00e5", Pattern.CANON_EQ);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2617
        m = p.matcher("test\u00e5");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2618
        if (!m.matches())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2619
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2620
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2621
        m.reset("testa\u030a");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2622
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2623
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2624
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2625
        // Decomposed char inside a char class
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2626
        p = Pattern.compile("test[abca\u030a]", Pattern.CANON_EQ);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2627
        m = p.matcher("test\u00e5");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2628
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2629
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2630
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2631
        m.reset("testa\u030a");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2632
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2633
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2634
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2635
        // Composed char inside a char class
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2636
        p = Pattern.compile("test[abc\u00e5def\u00e0]", Pattern.CANON_EQ);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2637
        m = p.matcher("test\u00e5");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2638
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2639
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2640
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2641
        m.reset("testa\u0300");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2642
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2643
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2644
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2645
        m.reset("testa\u030a");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2646
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2647
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2648
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2649
        // Marks that cannot legally change order and be equivalent
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2650
        p = Pattern.compile("testa\u0308\u0300", Pattern.CANON_EQ);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2651
        check(p, "testa\u0308\u0300", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2652
        check(p, "testa\u0300\u0308", false);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2653
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2654
        // Marks that can legally change order and be equivalent
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2655
        p = Pattern.compile("testa\u0308\u0323", Pattern.CANON_EQ);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2656
        check(p, "testa\u0308\u0323", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2657
        check(p, "testa\u0323\u0308", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2658
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2659
        // Test all equivalences of the sequence a\u0308\u0323\u0300
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2660
        p = Pattern.compile("testa\u0308\u0323\u0300", Pattern.CANON_EQ);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2661
        check(p, "testa\u0308\u0323\u0300", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2662
        check(p, "testa\u0323\u0308\u0300", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2663
        check(p, "testa\u0308\u0300\u0323", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2664
        check(p, "test\u00e4\u0323\u0300", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2665
        check(p, "test\u00e4\u0300\u0323", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2666
37882
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2667
        Object[][] data = new Object[][] {
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2668
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2669
        // JDK-4867170
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2670
        { "[\u1f80-\u1f82]", "ab\u1f80cd",             "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2671
        { "[\u1f80-\u1f82]", "ab\u1f81cd",             "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2672
        { "[\u1f80-\u1f82]", "ab\u1f82cd",             "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2673
        { "[\u1f80-\u1f82]", "ab\u03b1\u0314\u0345cd", "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2674
        { "[\u1f80-\u1f82]", "ab\u03b1\u0345\u0314cd", "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2675
        { "[\u1f80-\u1f82]", "ab\u1f01\u0345cd",       "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2676
        { "[\u1f80-\u1f82]", "ab\u1f00\u0345cd",       "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2677
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2678
        { "\\p{IsGreek}",    "ab\u1f80cd",             "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2679
        { "\\p{IsGreek}",    "ab\u1f81cd",             "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2680
        { "\\p{IsGreek}",    "ab\u1f82cd",             "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2681
        { "\\p{IsGreek}",    "ab\u03b1\u0314\u0345cd", "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2682
        { "\\p{IsGreek}",    "ab\u1f01\u0345cd",       "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2683
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2684
        // backtracking, force to match "\u1f80", instead of \u1f82"
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2685
        { "ab\\p{IsGreek}\u0300cd", "ab\u03b1\u0313\u0345\u0300cd", "m", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2686
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2687
        { "[\\p{IsGreek}]",  "\u03b1\u0314\u0345",     "m", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2688
        { "\\p{IsGreek}",    "\u03b1\u0314\u0345",     "m", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2689
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2690
        { "[^\u1f80-\u1f82]","\u1f81",                 "m", false },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2691
        { "[^\u1f80-\u1f82]","\u03b1\u0314\u0345",     "m", false },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2692
        { "[^\u1f01\u0345]", "\u1f81",                 "f", false },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2693
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2694
        { "[^\u1f81]+",      "\u1f80\u1f82",           "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2695
        { "[\u1f80]",        "ab\u1f80cd",             "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2696
        { "\u1f80",          "ab\u1f80cd",             "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2697
        { "\u1f00\u0345\u0300",  "\u1f82", "m", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2698
        { "\u1f80",          "-\u1f00\u0345\u0300-",   "f", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2699
        { "\u1f82",          "\u1f00\u0345\u0300",     "m", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2700
        { "\u1f82",          "\u1f80\u0300",           "m", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2701
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2702
        // JDK-7080302       # compile failed
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2703
        { "a(\u0041\u0301\u0328)", "a\u0041\u0301\u0328", "m", true},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2704
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2705
        // JDK-6728861, same cause as above one
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2706
        { "\u00e9\u00e9n", "e\u0301e\u0301n", "m", true},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2707
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2708
        // JDK-6995635
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2709
        { "(\u00e9)", "e\u0301", "m", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2710
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2711
        // JDK-6736245
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2712
        // intereting special case, nfc(u2add+u0338) -> u2add+u0338) NOT u2adc
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2713
        { "\u2ADC", "\u2ADC", "m", true},          // NFC
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2714
        { "\u2ADC", "\u2ADD\u0338", "m", true},    // NFD
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2715
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2716
        //  4916384.
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2717
        // Decomposed hangul (jamos) works inside clazz
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2718
        { "[\u1100\u1161]", "\u1100\u1161", "m", true},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2719
        { "[\u1100\u1161]", "\uac00", "m", true},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2720
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2721
        { "[\uac00]", "\u1100\u1161", "m", true},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2722
        { "[\uac00]", "\uac00", "m", true},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2723
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2724
        // Decomposed hangul (jamos)
37882
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2725
        { "\u1100\u1161", "\u1100\u1161", "m", true},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2726
        { "\u1100\u1161", "\uac00", "m", true},
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2727
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2728
        // Composed hangul
37882
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2729
        { "\uac00",  "\u1100\u1161", "m", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2730
        { "\uac00",  "\uac00", "m", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2731
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2732
        /* Need a NFDSlice to nfd the source to solve this issue
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2733
           u+1d1c0 -> nfd: <u+1d1ba><u+1d165><u+1d16f>  -> nfc: <u+1d1ba><u+1d165><u+1d16f>
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2734
           u+1d1bc -> nfd: <u+1d1ba><u+1d165>           -> nfc: <u+1d1ba><u+1d165>
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2735
           <u+1d1bc><u+1d16f> -> nfd: <u+1d1ba><u+1d165><u+1d16f> -> nfc: <u+1d1ba><u+1d165><u+1d16f>
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2736
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2737
        // Decomposed supplementary outside char classes
37882
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2738
        // { "test\ud834\uddbc\ud834\udd6f", "test\ud834\uddc0", "m", true },
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2739
        // Composed supplementary outside char classes
37882
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2740
        // { "test\ud834\uddc0", "test\ud834\uddbc\ud834\udd6f", "m", true },
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2741
        */
37882
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2742
        { "test\ud834\uddbc\ud834\udd6f", "test\ud834\uddbc\ud834\udd6f", "m", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2743
        { "test\ud834\uddc0",             "test\ud834\uddbc\ud834\udd6f", "m", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2744
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2745
        { "test\ud834\uddc0",             "test\ud834\uddc0",             "m", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2746
        { "test\ud834\uddbc\ud834\udd6f", "test\ud834\uddc0",             "m", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2747
        };
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2748
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2749
        int failCount = 0;
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2750
        for (Object[] d : data) {
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2751
            String pn = (String)d[0];
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2752
            String tt = (String)d[1];
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2753
            boolean isFind = "f".equals(((String)d[2]));
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2754
            boolean expected = (boolean)d[3];
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2755
            boolean ret = isFind ? Pattern.compile(pn, Pattern.CANON_EQ).matcher(tt).find()
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2756
                                 : Pattern.compile(pn, Pattern.CANON_EQ).matcher(tt).matches();
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2757
            if (ret != expected) {
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2758
                failCount++;
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2759
                continue;
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2760
            }
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  2761
        }
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2762
        report("Canonical Equivalence");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2763
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2764
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2765
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2766
     * A basic sanity test of Matcher.replaceAll().
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2767
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2768
    private static void globalSubstitute() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2769
        // Global substitution with a literal
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2770
        Pattern p = Pattern.compile("(ab)(c*)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2771
        Matcher m = p.matcher("abccczzzabcczzzabccc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2772
        if (!m.replaceAll("test").equals("testzzztestzzztest"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2773
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2774
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2775
        m.reset("zzzabccczzzabcczzzabccczzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2776
        if (!m.replaceAll("test").equals("zzztestzzztestzzztestzzz"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2777
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2778
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2779
        // Global substitution with groups
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2780
        m.reset("zzzabccczzzabcczzzabccczzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2781
        String result = m.replaceAll("$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2782
        if (!result.equals("zzzabzzzabzzzabzzz"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2783
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2784
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2785
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2786
        // Global substitution with a literal
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2787
        p = Pattern.compile(toSupplementaries("(ab)(c*)"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2788
        m = p.matcher(toSupplementaries("abccczzzabcczzzabccc"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2789
        if (!m.replaceAll(toSupplementaries("test")).
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2790
            equals(toSupplementaries("testzzztestzzztest")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2791
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2792
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2793
        m.reset(toSupplementaries("zzzabccczzzabcczzzabccczzz"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2794
        if (!m.replaceAll(toSupplementaries("test")).
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2795
            equals(toSupplementaries("zzztestzzztestzzztestzzz")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2796
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2797
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2798
        // Global substitution with groups
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2799
        m.reset(toSupplementaries("zzzabccczzzabcczzzabccczzz"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2800
        result = m.replaceAll("$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2801
        if (!result.equals(toSupplementaries("zzzabzzzabzzzabzzz")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2802
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2803
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2804
        report("Global Substitution");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2805
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2806
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2807
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2808
     * Tests the usage of Matcher.appendReplacement() with literal
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2809
     * and group substitutions.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2810
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2811
    private static void stringbufferSubstitute() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2812
        // SB substitution with literal
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2813
        String blah = "zzzblahzzz";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2814
        Pattern p = Pattern.compile("blah");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2815
        Matcher m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2816
        StringBuffer result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2817
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2818
            m.appendReplacement(result, "blech");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2819
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2820
        } catch (IllegalStateException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2821
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2822
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2823
        m.appendReplacement(result, "blech");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2824
        if (!result.toString().equals("zzzblech"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2825
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2826
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2827
        m.appendTail(result);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2828
        if (!result.toString().equals("zzzblechzzz"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2829
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2830
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2831
        // SB substitution with groups
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2832
        blah = "zzzabcdzzz";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2833
        p = Pattern.compile("(ab)(cd)*");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2834
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2835
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2836
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2837
            m.appendReplacement(result, "$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2838
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2839
        } catch (IllegalStateException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2840
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2841
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2842
        m.appendReplacement(result, "$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2843
        if (!result.toString().equals("zzzab"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2844
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2845
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2846
        m.appendTail(result);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2847
        if (!result.toString().equals("zzzabzzz"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2848
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2849
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2850
        // SB substitution with 3 groups
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2851
        blah = "zzzabcdcdefzzz";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2852
        p = Pattern.compile("(ab)(cd)*(ef)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2853
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2854
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2855
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2856
            m.appendReplacement(result, "$1w$2w$3");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2857
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2858
        } catch (IllegalStateException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2859
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2860
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2861
        m.appendReplacement(result, "$1w$2w$3");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2862
        if (!result.toString().equals("zzzabwcdwef"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2863
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2864
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2865
        m.appendTail(result);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2866
        if (!result.toString().equals("zzzabwcdwefzzz"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2867
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2868
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2869
        // SB substitution with groups and three matches
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2870
        // skipping middle match
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2871
        blah = "zzzabcdzzzabcddzzzabcdzzz";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2872
        p = Pattern.compile("(ab)(cd*)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2873
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2874
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2875
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2876
            m.appendReplacement(result, "$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2877
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2878
        } catch (IllegalStateException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2879
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2880
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2881
        m.appendReplacement(result, "$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2882
        if (!result.toString().equals("zzzab"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2883
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2884
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2885
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2886
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2887
        m.appendReplacement(result, "$2");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2888
        if (!result.toString().equals("zzzabzzzabcddzzzcd"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2889
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2890
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2891
        m.appendTail(result);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2892
        if (!result.toString().equals("zzzabzzzabcddzzzcdzzz"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2893
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2894
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2895
        // Check to make sure escaped $ is ignored
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2896
        blah = "zzzabcdcdefzzz";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2897
        p = Pattern.compile("(ab)(cd)*(ef)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2898
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2899
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2900
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2901
        m.appendReplacement(result, "$1w\\$2w$3");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2902
        if (!result.toString().equals("zzzabw$2wef"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2903
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2904
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2905
        m.appendTail(result);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2906
        if (!result.toString().equals("zzzabw$2wefzzz"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2907
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2908
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2909
        // Check to make sure a reference to nonexistent group causes error
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2910
        blah = "zzzabcdcdefzzz";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2911
        p = Pattern.compile("(ab)(cd)*(ef)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2912
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2913
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2914
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2915
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2916
            m.appendReplacement(result, "$1w$5w$3");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2917
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2918
        } catch (IndexOutOfBoundsException ioobe) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2919
            // Correct result
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2920
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2921
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2922
        // Check double digit group references
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2923
        blah = "zzz123456789101112zzz";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2924
        p = Pattern.compile("(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2925
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2926
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2927
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2928
        m.appendReplacement(result, "$1w$11w$3");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2929
        if (!result.toString().equals("zzz1w11w3"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2930
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2931
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2932
        // Check to make sure it backs off $15 to $1 if only three groups
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2933
        blah = "zzzabcdcdefzzz";
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2934
        p = Pattern.compile("(ab)(cd)*(ef)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2935
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2936
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2937
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2938
        m.appendReplacement(result, "$1w$15w$3");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2939
        if (!result.toString().equals("zzzabwab5wef"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2940
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2941
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2942
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2943
        // Supplementary character test
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2944
        // SB substitution with literal
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2945
        blah = toSupplementaries("zzzblahzzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2946
        p = Pattern.compile(toSupplementaries("blah"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2947
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2948
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2949
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2950
            m.appendReplacement(result, toSupplementaries("blech"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2951
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2952
        } catch (IllegalStateException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2953
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2954
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2955
        m.appendReplacement(result, toSupplementaries("blech"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2956
        if (!result.toString().equals(toSupplementaries("zzzblech")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2957
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2958
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2959
        m.appendTail(result);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2960
        if (!result.toString().equals(toSupplementaries("zzzblechzzz")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2961
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2962
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2963
        // SB substitution with groups
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2964
        blah = toSupplementaries("zzzabcdzzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2965
        p = Pattern.compile(toSupplementaries("(ab)(cd)*"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2966
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2967
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2968
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2969
            m.appendReplacement(result, "$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2970
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2971
        } catch (IllegalStateException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2972
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2973
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2974
        m.appendReplacement(result, "$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2975
        if (!result.toString().equals(toSupplementaries("zzzab")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2976
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2977
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2978
        m.appendTail(result);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2979
        if (!result.toString().equals(toSupplementaries("zzzabzzz")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2980
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2981
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2982
        // SB substitution with 3 groups
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2983
        blah = toSupplementaries("zzzabcdcdefzzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2984
        p = Pattern.compile(toSupplementaries("(ab)(cd)*(ef)"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2985
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2986
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2987
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2988
            m.appendReplacement(result, toSupplementaries("$1w$2w$3"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2989
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2990
        } catch (IllegalStateException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2991
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2992
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2993
        m.appendReplacement(result, toSupplementaries("$1w$2w$3"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2994
        if (!result.toString().equals(toSupplementaries("zzzabwcdwef")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2995
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2996
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2997
        m.appendTail(result);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2998
        if (!result.toString().equals(toSupplementaries("zzzabwcdwefzzz")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  2999
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3000
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3001
        // SB substitution with groups and three matches
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3002
        // skipping middle match
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3003
        blah = toSupplementaries("zzzabcdzzzabcddzzzabcdzzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3004
        p = Pattern.compile(toSupplementaries("(ab)(cd*)"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3005
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3006
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3007
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3008
            m.appendReplacement(result, "$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3009
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3010
        } catch (IllegalStateException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3011
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3012
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3013
        m.appendReplacement(result, "$1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3014
        if (!result.toString().equals(toSupplementaries("zzzab")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3015
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3016
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3017
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3018
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3019
        m.appendReplacement(result, "$2");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3020
        if (!result.toString().equals(toSupplementaries("zzzabzzzabcddzzzcd")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3021
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3022
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3023
        m.appendTail(result);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3024
        if (!result.toString().equals(toSupplementaries("zzzabzzzabcddzzzcdzzz")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3025
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3026
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3027
        // Check to make sure escaped $ is ignored
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3028
        blah = toSupplementaries("zzzabcdcdefzzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3029
        p = Pattern.compile(toSupplementaries("(ab)(cd)*(ef)"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3030
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3031
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3032
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3033
        m.appendReplacement(result, toSupplementaries("$1w\\$2w$3"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3034
        if (!result.toString().equals(toSupplementaries("zzzabw$2wef")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3035
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3036
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3037
        m.appendTail(result);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3038
        if (!result.toString().equals(toSupplementaries("zzzabw$2wefzzz")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3039
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3040
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3041
        // Check to make sure a reference to nonexistent group causes error
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3042
        blah = toSupplementaries("zzzabcdcdefzzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3043
        p = Pattern.compile(toSupplementaries("(ab)(cd)*(ef)"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3044
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3045
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3046
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3047
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3048
            m.appendReplacement(result, toSupplementaries("$1w$5w$3"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3049
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3050
        } catch (IndexOutOfBoundsException ioobe) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3051
            // Correct result
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3052
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3053
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3054
        // Check double digit group references
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3055
        blah = toSupplementaries("zzz123456789101112zzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3056
        p = Pattern.compile("(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3057
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3058
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3059
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3060
        m.appendReplacement(result, toSupplementaries("$1w$11w$3"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3061
        if (!result.toString().equals(toSupplementaries("zzz1w11w3")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3062
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3063
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3064
        // Check to make sure it backs off $15 to $1 if only three groups
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3065
        blah = toSupplementaries("zzzabcdcdefzzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3066
        p = Pattern.compile(toSupplementaries("(ab)(cd)*(ef)"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3067
        m = p.matcher(blah);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3068
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3069
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3070
        m.appendReplacement(result, toSupplementaries("$1w$15w$3"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3071
        if (!result.toString().equals(toSupplementaries("zzzabwab5wef")))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3072
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3073
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3074
        // Check nothing has been appended into the output buffer if
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3075
        // the replacement string triggers IllegalArgumentException.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3076
        p = Pattern.compile("(abc)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3077
        m = p.matcher("abcd");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3078
        result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3079
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3080
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3081
            m.appendReplacement(result, ("xyz$g"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3082
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3083
        } catch (IllegalArgumentException iae) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3084
            if (result.length() != 0)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3085
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3086
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3087
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3088
        report("SB Substitution");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3089
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3090
23734
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3091
    /**
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3092
     * Tests the usage of Matcher.appendReplacement() with literal
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3093
     * and group substitutions.
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3094
     */
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3095
    private static void stringbuilderSubstitute() throws Exception {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3096
        // SB substitution with literal
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3097
        String blah = "zzzblahzzz";
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3098
        Pattern p = Pattern.compile("blah");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3099
        Matcher m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3100
        StringBuilder result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3101
        try {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3102
            m.appendReplacement(result, "blech");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3103
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3104
        } catch (IllegalStateException e) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3105
        }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3106
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3107
        m.appendReplacement(result, "blech");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3108
        if (!result.toString().equals("zzzblech"))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3109
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3110
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3111
        m.appendTail(result);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3112
        if (!result.toString().equals("zzzblechzzz"))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3113
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3114
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3115
        // SB substitution with groups
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3116
        blah = "zzzabcdzzz";
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3117
        p = Pattern.compile("(ab)(cd)*");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3118
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3119
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3120
        try {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3121
            m.appendReplacement(result, "$1");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3122
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3123
        } catch (IllegalStateException e) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3124
        }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3125
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3126
        m.appendReplacement(result, "$1");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3127
        if (!result.toString().equals("zzzab"))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3128
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3129
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3130
        m.appendTail(result);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3131
        if (!result.toString().equals("zzzabzzz"))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3132
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3133
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3134
        // SB substitution with 3 groups
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3135
        blah = "zzzabcdcdefzzz";
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3136
        p = Pattern.compile("(ab)(cd)*(ef)");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3137
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3138
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3139
        try {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3140
            m.appendReplacement(result, "$1w$2w$3");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3141
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3142
        } catch (IllegalStateException e) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3143
        }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3144
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3145
        m.appendReplacement(result, "$1w$2w$3");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3146
        if (!result.toString().equals("zzzabwcdwef"))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3147
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3148
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3149
        m.appendTail(result);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3150
        if (!result.toString().equals("zzzabwcdwefzzz"))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3151
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3152
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3153
        // SB substitution with groups and three matches
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3154
        // skipping middle match
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3155
        blah = "zzzabcdzzzabcddzzzabcdzzz";
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3156
        p = Pattern.compile("(ab)(cd*)");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3157
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3158
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3159
        try {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3160
            m.appendReplacement(result, "$1");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3161
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3162
        } catch (IllegalStateException e) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3163
        }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3164
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3165
        m.appendReplacement(result, "$1");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3166
        if (!result.toString().equals("zzzab"))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3167
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3168
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3169
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3170
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3171
        m.appendReplacement(result, "$2");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3172
        if (!result.toString().equals("zzzabzzzabcddzzzcd"))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3173
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3174
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3175
        m.appendTail(result);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3176
        if (!result.toString().equals("zzzabzzzabcddzzzcdzzz"))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3177
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3178
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3179
        // Check to make sure escaped $ is ignored
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3180
        blah = "zzzabcdcdefzzz";
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3181
        p = Pattern.compile("(ab)(cd)*(ef)");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3182
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3183
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3184
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3185
        m.appendReplacement(result, "$1w\\$2w$3");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3186
        if (!result.toString().equals("zzzabw$2wef"))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3187
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3188
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3189
        m.appendTail(result);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3190
        if (!result.toString().equals("zzzabw$2wefzzz"))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3191
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3192
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3193
        // Check to make sure a reference to nonexistent group causes error
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3194
        blah = "zzzabcdcdefzzz";
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3195
        p = Pattern.compile("(ab)(cd)*(ef)");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3196
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3197
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3198
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3199
        try {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3200
            m.appendReplacement(result, "$1w$5w$3");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3201
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3202
        } catch (IndexOutOfBoundsException ioobe) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3203
            // Correct result
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3204
        }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3205
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3206
        // Check double digit group references
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3207
        blah = "zzz123456789101112zzz";
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3208
        p = Pattern.compile("(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3209
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3210
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3211
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3212
        m.appendReplacement(result, "$1w$11w$3");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3213
        if (!result.toString().equals("zzz1w11w3"))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3214
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3215
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3216
        // Check to make sure it backs off $15 to $1 if only three groups
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3217
        blah = "zzzabcdcdefzzz";
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3218
        p = Pattern.compile("(ab)(cd)*(ef)");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3219
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3220
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3221
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3222
        m.appendReplacement(result, "$1w$15w$3");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3223
        if (!result.toString().equals("zzzabwab5wef"))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3224
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3225
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3226
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3227
        // Supplementary character test
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3228
        // SB substitution with literal
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3229
        blah = toSupplementaries("zzzblahzzz");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3230
        p = Pattern.compile(toSupplementaries("blah"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3231
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3232
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3233
        try {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3234
            m.appendReplacement(result, toSupplementaries("blech"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3235
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3236
        } catch (IllegalStateException e) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3237
        }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3238
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3239
        m.appendReplacement(result, toSupplementaries("blech"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3240
        if (!result.toString().equals(toSupplementaries("zzzblech")))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3241
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3242
        m.appendTail(result);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3243
        if (!result.toString().equals(toSupplementaries("zzzblechzzz")))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3244
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3245
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3246
        // SB substitution with groups
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3247
        blah = toSupplementaries("zzzabcdzzz");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3248
        p = Pattern.compile(toSupplementaries("(ab)(cd)*"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3249
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3250
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3251
        try {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3252
            m.appendReplacement(result, "$1");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3253
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3254
        } catch (IllegalStateException e) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3255
        }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3256
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3257
        m.appendReplacement(result, "$1");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3258
        if (!result.toString().equals(toSupplementaries("zzzab")))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3259
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3260
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3261
        m.appendTail(result);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3262
        if (!result.toString().equals(toSupplementaries("zzzabzzz")))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3263
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3264
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3265
        // SB substitution with 3 groups
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3266
        blah = toSupplementaries("zzzabcdcdefzzz");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3267
        p = Pattern.compile(toSupplementaries("(ab)(cd)*(ef)"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3268
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3269
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3270
        try {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3271
            m.appendReplacement(result, toSupplementaries("$1w$2w$3"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3272
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3273
        } catch (IllegalStateException e) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3274
        }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3275
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3276
        m.appendReplacement(result, toSupplementaries("$1w$2w$3"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3277
        if (!result.toString().equals(toSupplementaries("zzzabwcdwef")))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3278
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3279
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3280
        m.appendTail(result);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3281
        if (!result.toString().equals(toSupplementaries("zzzabwcdwefzzz")))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3282
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3283
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3284
        // SB substitution with groups and three matches
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3285
        // skipping middle match
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3286
        blah = toSupplementaries("zzzabcdzzzabcddzzzabcdzzz");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3287
        p = Pattern.compile(toSupplementaries("(ab)(cd*)"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3288
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3289
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3290
        try {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3291
            m.appendReplacement(result, "$1");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3292
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3293
        } catch (IllegalStateException e) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3294
        }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3295
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3296
        m.appendReplacement(result, "$1");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3297
        if (!result.toString().equals(toSupplementaries("zzzab")))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3298
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3299
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3300
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3301
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3302
        m.appendReplacement(result, "$2");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3303
        if (!result.toString().equals(toSupplementaries("zzzabzzzabcddzzzcd")))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3304
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3305
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3306
        m.appendTail(result);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3307
        if (!result.toString().equals(toSupplementaries("zzzabzzzabcddzzzcdzzz")))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3308
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3309
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3310
        // Check to make sure escaped $ is ignored
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3311
        blah = toSupplementaries("zzzabcdcdefzzz");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3312
        p = Pattern.compile(toSupplementaries("(ab)(cd)*(ef)"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3313
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3314
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3315
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3316
        m.appendReplacement(result, toSupplementaries("$1w\\$2w$3"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3317
        if (!result.toString().equals(toSupplementaries("zzzabw$2wef")))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3318
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3319
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3320
        m.appendTail(result);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3321
        if (!result.toString().equals(toSupplementaries("zzzabw$2wefzzz")))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3322
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3323
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3324
        // Check to make sure a reference to nonexistent group causes error
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3325
        blah = toSupplementaries("zzzabcdcdefzzz");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3326
        p = Pattern.compile(toSupplementaries("(ab)(cd)*(ef)"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3327
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3328
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3329
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3330
        try {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3331
            m.appendReplacement(result, toSupplementaries("$1w$5w$3"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3332
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3333
        } catch (IndexOutOfBoundsException ioobe) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3334
            // Correct result
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3335
        }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3336
        // Check double digit group references
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3337
        blah = toSupplementaries("zzz123456789101112zzz");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3338
        p = Pattern.compile("(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3339
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3340
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3341
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3342
        m.appendReplacement(result, toSupplementaries("$1w$11w$3"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3343
        if (!result.toString().equals(toSupplementaries("zzz1w11w3")))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3344
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3345
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3346
        // Check to make sure it backs off $15 to $1 if only three groups
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3347
        blah = toSupplementaries("zzzabcdcdefzzz");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3348
        p = Pattern.compile(toSupplementaries("(ab)(cd)*(ef)"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3349
        m = p.matcher(blah);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3350
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3351
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3352
        m.appendReplacement(result, toSupplementaries("$1w$15w$3"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3353
        if (!result.toString().equals(toSupplementaries("zzzabwab5wef")))
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3354
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3355
        // Check nothing has been appended into the output buffer if
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3356
        // the replacement string triggers IllegalArgumentException.
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3357
        p = Pattern.compile("(abc)");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3358
        m = p.matcher("abcd");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3359
        result = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3360
        m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3361
        try {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3362
            m.appendReplacement(result, ("xyz$g"));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3363
            failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3364
        } catch (IllegalArgumentException iae) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3365
            if (result.length() != 0)
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3366
                failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3367
        }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3368
        report("SB Substitution 2");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3369
    }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3370
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3371
    /*
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3372
     * 5 groups of characters are created to make a substitution string.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3373
     * A base string will be created including random lead chars, the
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3374
     * substitution string, and random trailing chars.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3375
     * A pattern containing the 5 groups is searched for and replaced with:
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3376
     * random group + random string + random group.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3377
     * The results are checked for correctness.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3378
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3379
    private static void substitutionBasher() {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3380
        for (int runs = 0; runs<1000; runs++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3381
            // Create a base string to work in
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3382
            int leadingChars = generator.nextInt(10);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3383
            StringBuffer baseBuffer = new StringBuffer(100);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3384
            String leadingString = getRandomAlphaString(leadingChars);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3385
            baseBuffer.append(leadingString);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3386
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3387
            // Create 5 groups of random number of random chars
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3388
            // Create the string to substitute
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3389
            // Create the pattern string to search for
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3390
            StringBuffer bufferToSub = new StringBuffer(25);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3391
            StringBuffer bufferToPat = new StringBuffer(50);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3392
            String[] groups = new String[5];
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3393
            for(int i=0; i<5; i++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3394
                int aGroupSize = generator.nextInt(5)+1;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3395
                groups[i] = getRandomAlphaString(aGroupSize);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3396
                bufferToSub.append(groups[i]);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3397
                bufferToPat.append('(');
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3398
                bufferToPat.append(groups[i]);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3399
                bufferToPat.append(')');
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3400
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3401
            String stringToSub = bufferToSub.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3402
            String pattern = bufferToPat.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3403
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3404
            // Place sub string into working string at random index
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3405
            baseBuffer.append(stringToSub);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3406
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3407
            // Append random chars to end
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3408
            int trailingChars = generator.nextInt(10);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3409
            String trailingString = getRandomAlphaString(trailingChars);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3410
            baseBuffer.append(trailingString);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3411
            String baseString = baseBuffer.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3412
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3413
            // Create test pattern and matcher
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3414
            Pattern p = Pattern.compile(pattern);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3415
            Matcher m = p.matcher(baseString);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3416
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3417
            // Reject candidate if pattern happens to start early
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3418
            m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3419
            if (m.start() < leadingChars)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3420
                continue;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3421
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3422
            // Reject candidate if more than one match
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3423
            if (m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3424
                continue;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3425
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3426
            // Construct a replacement string with :
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3427
            // random group + random string + random group
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3428
            StringBuffer bufferToRep = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3429
            int groupIndex1 = generator.nextInt(5);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3430
            bufferToRep.append("$" + (groupIndex1 + 1));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3431
            String randomMidString = getRandomAlphaString(5);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3432
            bufferToRep.append(randomMidString);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3433
            int groupIndex2 = generator.nextInt(5);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3434
            bufferToRep.append("$" + (groupIndex2 + 1));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3435
            String replacement = bufferToRep.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3436
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3437
            // Do the replacement
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3438
            String result = m.replaceAll(replacement);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3439
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3440
            // Construct expected result
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3441
            StringBuffer bufferToRes = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3442
            bufferToRes.append(leadingString);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3443
            bufferToRes.append(groups[groupIndex1]);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3444
            bufferToRes.append(randomMidString);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3445
            bufferToRes.append(groups[groupIndex2]);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3446
            bufferToRes.append(trailingString);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3447
            String expectedResult = bufferToRes.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3448
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3449
            // Check results
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3450
            if (!result.equals(expectedResult))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3451
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3452
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3453
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3454
        report("Substitution Basher");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3455
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3456
23734
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3457
    /*
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3458
     * 5 groups of characters are created to make a substitution string.
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3459
     * A base string will be created including random lead chars, the
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3460
     * substitution string, and random trailing chars.
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3461
     * A pattern containing the 5 groups is searched for and replaced with:
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3462
     * random group + random string + random group.
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3463
     * The results are checked for correctness.
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3464
     */
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3465
    private static void substitutionBasher2() {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3466
        for (int runs = 0; runs<1000; runs++) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3467
            // Create a base string to work in
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3468
            int leadingChars = generator.nextInt(10);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3469
            StringBuilder baseBuffer = new StringBuilder(100);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3470
            String leadingString = getRandomAlphaString(leadingChars);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3471
            baseBuffer.append(leadingString);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3472
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3473
            // Create 5 groups of random number of random chars
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3474
            // Create the string to substitute
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3475
            // Create the pattern string to search for
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3476
            StringBuilder bufferToSub = new StringBuilder(25);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3477
            StringBuilder bufferToPat = new StringBuilder(50);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3478
            String[] groups = new String[5];
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3479
            for(int i=0; i<5; i++) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3480
                int aGroupSize = generator.nextInt(5)+1;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3481
                groups[i] = getRandomAlphaString(aGroupSize);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3482
                bufferToSub.append(groups[i]);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3483
                bufferToPat.append('(');
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3484
                bufferToPat.append(groups[i]);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3485
                bufferToPat.append(')');
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3486
            }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3487
            String stringToSub = bufferToSub.toString();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3488
            String pattern = bufferToPat.toString();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3489
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3490
            // Place sub string into working string at random index
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3491
            baseBuffer.append(stringToSub);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3492
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3493
            // Append random chars to end
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3494
            int trailingChars = generator.nextInt(10);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3495
            String trailingString = getRandomAlphaString(trailingChars);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3496
            baseBuffer.append(trailingString);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3497
            String baseString = baseBuffer.toString();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3498
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3499
            // Create test pattern and matcher
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3500
            Pattern p = Pattern.compile(pattern);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3501
            Matcher m = p.matcher(baseString);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3502
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3503
            // Reject candidate if pattern happens to start early
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3504
            m.find();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3505
            if (m.start() < leadingChars)
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3506
                continue;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3507
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3508
            // Reject candidate if more than one match
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3509
            if (m.find())
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3510
                continue;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3511
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3512
            // Construct a replacement string with :
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3513
            // random group + random string + random group
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3514
            StringBuilder bufferToRep = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3515
            int groupIndex1 = generator.nextInt(5);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3516
            bufferToRep.append("$" + (groupIndex1 + 1));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3517
            String randomMidString = getRandomAlphaString(5);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3518
            bufferToRep.append(randomMidString);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3519
            int groupIndex2 = generator.nextInt(5);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3520
            bufferToRep.append("$" + (groupIndex2 + 1));
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3521
            String replacement = bufferToRep.toString();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3522
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3523
            // Do the replacement
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3524
            String result = m.replaceAll(replacement);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3525
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3526
            // Construct expected result
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3527
            StringBuilder bufferToRes = new StringBuilder();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3528
            bufferToRes.append(leadingString);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3529
            bufferToRes.append(groups[groupIndex1]);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3530
            bufferToRes.append(randomMidString);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3531
            bufferToRes.append(groups[groupIndex2]);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3532
            bufferToRes.append(trailingString);
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3533
            String expectedResult = bufferToRes.toString();
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3534
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3535
            // Check results
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3536
            if (!result.equals(expectedResult)) {
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3537
                failCount++;
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3538
            }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3539
        }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3540
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3541
        report("Substitution Basher 2");
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3542
    }
439905b27f94 8039124: j.u.regex.Matcher.appendReplace/Tail() should support StringBuilder variant
sherman
parents: 22997
diff changeset
  3543
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3544
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3545
     * Checks the handling of some escape sequences that the Pattern
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3546
     * class should process instead of the java compiler. These are
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3547
     * not in the file because the escapes should be be processed
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3548
     * by the Pattern class when the regex is compiled.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3549
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3550
    private static void escapes() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3551
        Pattern p = Pattern.compile("\\043");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3552
        Matcher m = p.matcher("#");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3553
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3554
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3555
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3556
        p = Pattern.compile("\\x23");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3557
        m = p.matcher("#");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3558
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3559
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3560
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3561
        p = Pattern.compile("\\u0023");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3562
        m = p.matcher("#");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3563
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3564
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3565
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3566
        report("Escape sequences");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3567
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3568
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3569
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3570
     * Checks the handling of blank input situations. These
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3571
     * tests are incompatible with my test file format.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3572
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3573
    private static void blankInput() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3574
        Pattern p = Pattern.compile("abc", Pattern.CASE_INSENSITIVE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3575
        Matcher m = p.matcher("");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3576
        if (m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3577
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3578
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3579
        p = Pattern.compile("a*", Pattern.CASE_INSENSITIVE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3580
        m = p.matcher("");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3581
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3582
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3583
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3584
        p = Pattern.compile("abc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3585
        m = p.matcher("");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3586
        if (m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3587
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3588
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3589
        p = Pattern.compile("a*");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3590
        m = p.matcher("");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3591
        if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3592
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3593
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3594
        report("Blank input");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3595
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3596
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3597
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3598
     * Tests the Boyer-Moore pattern matching of a character sequence
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3599
     * on randomly generated patterns.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3600
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3601
    private static void bm() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3602
        doBnM('a');
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3603
        report("Boyer Moore (ASCII)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3604
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3605
        doBnM(Character.MIN_SUPPLEMENTARY_CODE_POINT - 10);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3606
        report("Boyer Moore (Supplementary)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3607
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3608
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3609
    private static void doBnM(int baseCharacter) throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3610
        int achar=0;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3611
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3612
        for (int i=0; i<100; i++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3613
            // Create a short pattern to search for
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3614
            int patternLength = generator.nextInt(7) + 4;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3615
            StringBuffer patternBuffer = new StringBuffer(patternLength);
31645
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3616
            String pattern;
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3617
            retry: for (;;) {
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3618
                for (int x=0; x<patternLength; x++) {
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3619
                    int ch = baseCharacter + generator.nextInt(26);
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3620
                    if (Character.isSupplementaryCodePoint(ch)) {
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3621
                        patternBuffer.append(Character.toChars(ch));
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3622
                    } else {
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3623
                        patternBuffer.append((char)ch);
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3624
                    }
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3625
                }
31645
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3626
                pattern = patternBuffer.toString();
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3627
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3628
                // Avoid patterns that start and end with the same substring
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3629
                // See JDK-6854417
34436
33c20335507c 8143854: java/util/regex/RegExTest.java.RegExTest failed
sherman
parents: 31645
diff changeset
  3630
                for (int x=1; x < pattern.length(); x++) {
31645
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3631
                    if (pattern.startsWith(pattern.substring(x)))
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3632
                        continue retry;
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3633
                }
26db68d6758c 6854417: TESTBUG: java/util/regex/RegExTest.java fails intermittently
igerasim
parents: 30436
diff changeset
  3634
                break;
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3635
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3636
            Pattern p = Pattern.compile(pattern);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3637
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3638
            // Create a buffer with random ASCII chars that does
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3639
            // not match the sample
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3640
            String toSearch = null;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3641
            StringBuffer s = null;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3642
            Matcher m = p.matcher("");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3643
            do {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3644
                s = new StringBuffer(100);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3645
                for (int x=0; x<100; x++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3646
                    int ch = baseCharacter + generator.nextInt(26);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3647
                    if (Character.isSupplementaryCodePoint(ch)) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3648
                        s.append(Character.toChars(ch));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3649
                    } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3650
                        s.append((char)ch);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3651
                    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3652
                }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3653
                toSearch = s.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3654
                m.reset(toSearch);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3655
            } while (m.find());
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3656
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3657
            // Insert the pattern at a random spot
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3658
            int insertIndex = generator.nextInt(99);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3659
            if (Character.isLowSurrogate(s.charAt(insertIndex)))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3660
                insertIndex++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3661
            s = s.insert(insertIndex, pattern);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3662
            toSearch = s.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3663
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3664
            // Make sure that the pattern is found
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3665
            m.reset(toSearch);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3666
            if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3667
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3668
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3669
            // Make sure that the match text is the pattern
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3670
            if (!m.group().equals(pattern))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3671
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3672
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3673
            // Make sure match occured at insertion point
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3674
            if (m.start() != insertIndex)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3675
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3676
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3677
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3678
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3679
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3680
     * Tests the matching of slices on randomly generated patterns.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3681
     * The Boyer-Moore optimization is not done on these patterns
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3682
     * because it uses unicode case folding.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3683
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3684
    private static void slice() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3685
        doSlice(Character.MAX_VALUE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3686
        report("Slice");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3687
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3688
        doSlice(Character.MAX_CODE_POINT);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3689
        report("Slice (Supplementary)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3690
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3691
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3692
    private static void doSlice(int maxCharacter) throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3693
        Random generator = new Random();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3694
        int achar=0;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3695
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3696
        for (int i=0; i<100; i++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3697
            // Create a short pattern to search for
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3698
            int patternLength = generator.nextInt(7) + 4;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3699
            StringBuffer patternBuffer = new StringBuffer(patternLength);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3700
            for (int x=0; x<patternLength; x++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3701
                int randomChar = 0;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3702
                while (!Character.isLetterOrDigit(randomChar))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3703
                    randomChar = generator.nextInt(maxCharacter);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3704
                if (Character.isSupplementaryCodePoint(randomChar)) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3705
                    patternBuffer.append(Character.toChars(randomChar));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3706
                } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3707
                    patternBuffer.append((char) randomChar);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3708
                }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3709
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3710
            String pattern =  patternBuffer.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3711
            Pattern p = Pattern.compile(pattern, Pattern.UNICODE_CASE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3712
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3713
            // Create a buffer with random chars that does not match the sample
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3714
            String toSearch = null;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3715
            StringBuffer s = null;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3716
            Matcher m = p.matcher("");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3717
            do {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3718
                s = new StringBuffer(100);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3719
                for (int x=0; x<100; x++) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3720
                    int randomChar = 0;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3721
                    while (!Character.isLetterOrDigit(randomChar))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3722
                        randomChar = generator.nextInt(maxCharacter);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3723
                    if (Character.isSupplementaryCodePoint(randomChar)) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3724
                        s.append(Character.toChars(randomChar));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3725
                    } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3726
                        s.append((char) randomChar);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3727
                    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3728
                }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3729
                toSearch = s.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3730
                m.reset(toSearch);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3731
            } while (m.find());
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3732
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3733
            // Insert the pattern at a random spot
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3734
            int insertIndex = generator.nextInt(99);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3735
            if (Character.isLowSurrogate(s.charAt(insertIndex)))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3736
                insertIndex++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3737
            s = s.insert(insertIndex, pattern);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3738
            toSearch = s.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3739
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3740
            // Make sure that the pattern is found
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3741
            m.reset(toSearch);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3742
            if (!m.find())
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3743
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3744
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3745
            // Make sure that the match text is the pattern
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3746
            if (!m.group().equals(pattern))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3747
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3748
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3749
            // Make sure match occured at insertion point
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3750
            if (m.start() != insertIndex)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3751
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3752
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3753
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3754
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3755
    private static void explainFailure(String pattern, String data,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3756
                                       String expected, String actual) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3757
        System.err.println("----------------------------------------");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3758
        System.err.println("Pattern = "+pattern);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3759
        System.err.println("Data = "+data);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3760
        System.err.println("Expected = " + expected);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3761
        System.err.println("Actual   = " + actual);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3762
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3763
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3764
    private static void explainFailure(String pattern, String data,
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3765
                                       Throwable t) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3766
        System.err.println("----------------------------------------");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3767
        System.err.println("Pattern = "+pattern);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3768
        System.err.println("Data = "+data);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3769
        t.printStackTrace(System.err);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3770
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3771
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3772
    // Testing examples from a file
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3773
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3774
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3775
     * Goes through the file "TestCases.txt" and creates many patterns
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3776
     * described in the file, matching the patterns against input lines in
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3777
     * the file, and comparing the results against the correct results
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3778
     * also found in the file. The file format is described in comments
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3779
     * at the head of the file.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3780
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3781
    private static void processFile(String fileName) throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3782
        File testCases = new File(System.getProperty("test.src", "."),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3783
                                  fileName);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3784
        FileInputStream in = new FileInputStream(testCases);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3785
        BufferedReader r = new BufferedReader(new InputStreamReader(in));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3786
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3787
        // Process next test case.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3788
        String aLine;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3789
        while((aLine = r.readLine()) != null) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3790
            // Read a line for pattern
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3791
            String patternString = grabLine(r);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3792
            Pattern p = null;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3793
            try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3794
                p = compileTestPattern(patternString);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3795
            } catch (PatternSyntaxException e) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3796
                String dataString = grabLine(r);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3797
                String expectedResult = grabLine(r);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3798
                if (expectedResult.startsWith("error"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3799
                    continue;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3800
                explainFailure(patternString, dataString, e);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3801
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3802
                continue;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3803
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3804
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3805
            // Read a line for input string
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3806
            String dataString = grabLine(r);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3807
            Matcher m = p.matcher(dataString);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3808
            StringBuffer result = new StringBuffer();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3809
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3810
            // Check for IllegalStateExceptions before a match
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3811
            failCount += preMatchInvariants(m);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3812
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3813
            boolean found = m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3814
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3815
            if (found)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3816
                failCount += postTrueMatchInvariants(m);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3817
            else
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3818
                failCount += postFalseMatchInvariants(m);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3819
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3820
            if (found) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3821
                result.append("true ");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3822
                result.append(m.group(0) + " ");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3823
            } else {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3824
                result.append("false ");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3825
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3826
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3827
            result.append(m.groupCount());
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3828
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3829
            if (found) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3830
                for (int i=1; i<m.groupCount()+1; i++)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3831
                    if (m.group(i) != null)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3832
                        result.append(" " +m.group(i));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3833
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3834
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3835
            // Read a line for the expected result
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3836
            String expectedResult = grabLine(r);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3837
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3838
            if (!result.toString().equals(expectedResult)) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3839
                explainFailure(patternString, dataString, expectedResult, result.toString());
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3840
                failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3841
            }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3842
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3843
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3844
        report(fileName);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3845
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3846
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3847
    private static int preMatchInvariants(Matcher m) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3848
        int failCount = 0;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3849
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3850
            m.start();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3851
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3852
        } catch (IllegalStateException ise) {}
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3853
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3854
            m.end();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3855
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3856
        } catch (IllegalStateException ise) {}
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3857
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3858
            m.group();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3859
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3860
        } catch (IllegalStateException ise) {}
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3861
        return failCount;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3862
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3863
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3864
    private static int postFalseMatchInvariants(Matcher m) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3865
        int failCount = 0;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3866
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3867
            m.group();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3868
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3869
        } catch (IllegalStateException ise) {}
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3870
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3871
            m.start();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3872
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3873
        } catch (IllegalStateException ise) {}
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3874
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3875
            m.end();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3876
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3877
        } catch (IllegalStateException ise) {}
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3878
        return failCount;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3879
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3880
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3881
    private static int postTrueMatchInvariants(Matcher m) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3882
        int failCount = 0;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3883
        //assert(m.start() = m.start(0);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3884
        if (m.start() != m.start(0))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3885
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3886
        //assert(m.end() = m.end(0);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3887
        if (m.start() != m.start(0))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3888
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3889
        //assert(m.group() = m.group(0);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3890
        if (!m.group().equals(m.group(0)))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3891
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3892
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3893
            m.group(50);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3894
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3895
        } catch (IndexOutOfBoundsException ise) {}
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3896
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3897
        return failCount;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3898
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3899
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3900
    private static Pattern compileTestPattern(String patternString) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3901
        if (!patternString.startsWith("'")) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3902
            return Pattern.compile(patternString);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3903
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3904
        int break1 = patternString.lastIndexOf("'");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3905
        String flagString = patternString.substring(
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3906
                                          break1+1, patternString.length());
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3907
        patternString = patternString.substring(1, break1);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3908
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3909
        if (flagString.equals("i"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3910
            return Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3911
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3912
        if (flagString.equals("m"))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3913
            return Pattern.compile(patternString, Pattern.MULTILINE);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3914
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3915
        return Pattern.compile(patternString);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3916
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3917
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3918
    /**
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3919
     * Reads a line from the input file. Keeps reading lines until a non
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3920
     * empty non comment line is read. If the line contains a \n then
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3921
     * these two characters are replaced by a newline char. If a \\uxxxx
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3922
     * sequence is read then the sequence is replaced by the unicode char.
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3923
     */
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3924
    private static String grabLine(BufferedReader r) throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3925
        int index = 0;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3926
        String line = r.readLine();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3927
        while (line.startsWith("//") || line.length() < 1)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3928
            line = r.readLine();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3929
        while ((index = line.indexOf("\\n")) != -1) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3930
            StringBuffer temp = new StringBuffer(line);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3931
            temp.replace(index, index+2, "\n");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3932
            line = temp.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3933
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3934
        while ((index = line.indexOf("\\u")) != -1) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3935
            StringBuffer temp = new StringBuffer(line);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3936
            String value = temp.substring(index+2, index+6);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3937
            char aChar = (char)Integer.parseInt(value, 16);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3938
            String unicodeChar = "" + aChar;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3939
            temp.replace(index, index+6, unicodeChar);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3940
            line = temp.toString();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3941
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3942
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3943
        return line;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3944
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3945
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3946
    private static void check(Pattern p, String s, String g, String expected) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3947
        Matcher m = p.matcher(s);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3948
        m.find();
17434
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3949
        if (!m.group(g).equals(expected) ||
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3950
            s.charAt(m.start(g)) != expected.charAt(0) ||
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3951
            s.charAt(m.end(g) - 1) != expected.charAt(expected.length() - 1))
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3952
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3953
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3954
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3955
    private static void checkReplaceFirst(String p, String s, String r, String expected)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3956
    {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3957
        if (!expected.equals(Pattern.compile(p)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3958
                                    .matcher(s)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3959
                                    .replaceFirst(r)))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3960
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3961
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3962
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3963
    private static void checkReplaceAll(String p, String s, String r, String expected)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3964
    {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3965
        if (!expected.equals(Pattern.compile(p)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3966
                                    .matcher(s)
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3967
                                    .replaceAll(r)))
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3968
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3969
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3970
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3971
    private static void checkExpectedFail(String p) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3972
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3973
            Pattern.compile(p);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3974
        } catch (PatternSyntaxException pse) {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3975
            //pse.printStackTrace();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3976
            return;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3977
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3978
        failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3979
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3980
17434
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3981
    private static void checkExpectedIAE(Matcher m, String g) {
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3982
        m.find();
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3983
        try {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3984
            m.group(g);
17434
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3985
        } catch (IllegalArgumentException x) {
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3986
            //iae.printStackTrace();
17434
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3987
            try {
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3988
                m.start(g);
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3989
            } catch (IllegalArgumentException xx) {
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3990
                try {
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3991
                    m.start(g);
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3992
                } catch (IllegalArgumentException xxx) {
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3993
                    return;
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3994
                }
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  3995
            }
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3996
        }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3997
        failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3998
    }
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  3999
17434
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4000
    private static void checkExpectedNPE(Matcher m) {
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4001
        m.find();
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4002
        try {
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4003
            m.group(null);
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4004
        } catch (NullPointerException x) {
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4005
            try {
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4006
                m.start(null);
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4007
            } catch (NullPointerException xx) {
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4008
                try {
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4009
                    m.end(null);
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4010
                } catch (NullPointerException xxx) {
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4011
                    return;
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4012
                }
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4013
            }
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4014
        }
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4015
        failCount++;
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4016
    }
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4017
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4018
    private static void namedGroupCaptureTest() throws Exception {
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4019
        check(Pattern.compile("x+(?<gname>y+)z+"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4020
              "xxxyyyzzz",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4021
              "gname",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4022
              "yyy");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4023
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4024
        check(Pattern.compile("x+(?<gname8>y+)z+"),
2290
3a3bde061968 6817475: named-capturing group name started with digit causes PSE exception
sherman
parents: 2070
diff changeset
  4025
              "xxxyyyzzz",
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4026
              "gname8",
2290
3a3bde061968 6817475: named-capturing group name started with digit causes PSE exception
sherman
parents: 2070
diff changeset
  4027
              "yyy");
3a3bde061968 6817475: named-capturing group name started with digit causes PSE exception
sherman
parents: 2070
diff changeset
  4028
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4029
        //backref
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4030
        Pattern pattern = Pattern.compile("(a*)bc\\1");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4031
        check(pattern, "zzzaabcazzz", true);  // found "abca"
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4032
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4033
        check(Pattern.compile("(?<gname>a*)bc\\k<gname>"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4034
              "zzzaabcaazzz", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4035
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4036
        check(Pattern.compile("(?<gname>abc)(def)\\k<gname>"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4037
              "abcdefabc", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4038
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4039
        check(Pattern.compile("(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(?<gname>k)\\k<gname>"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4040
              "abcdefghijkk", true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4041
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4042
        // Supplementary character tests
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4043
        check(Pattern.compile("(?<gname>" + toSupplementaries("a*)bc") + "\\k<gname>"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4044
              toSupplementaries("zzzaabcazzz"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4045
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4046
        check(Pattern.compile("(?<gname>" + toSupplementaries("a*)bc") + "\\k<gname>"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4047
              toSupplementaries("zzzaabcaazzz"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4048
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4049
        check(Pattern.compile("(?<gname>" + toSupplementaries("abc)(def)") + "\\k<gname>"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4050
              toSupplementaries("abcdefabc"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4051
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4052
        check(Pattern.compile(toSupplementaries("(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)") +
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4053
                              "(?<gname>" +
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4054
                              toSupplementaries("k)") + "\\k<gname>"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4055
              toSupplementaries("abcdefghijkk"), true);
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4056
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4057
        check(Pattern.compile("x+(?<gname>y+)z+\\k<gname>"),
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4058
              "xxxyyyzzzyyy",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4059
              "gname",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4060
              "yyy");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4061
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4062
        //replaceFirst/All
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4063
        checkReplaceFirst("(?<gn>ab)(c*)",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4064
                          "abccczzzabcczzzabccc",
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4065
                          "${gn}",
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4066
                          "abzzzabcczzzabccc");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4067
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4068
        checkReplaceAll("(?<gn>ab)(c*)",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4069
                        "abccczzzabcczzzabccc",
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4070
                        "${gn}",
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4071
                        "abzzzabzzzab");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4072
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4073
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4074
        checkReplaceFirst("(?<gn>ab)(c*)",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4075
                          "zzzabccczzzabcczzzabccczzz",
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4076
                          "${gn}",
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4077
                          "zzzabzzzabcczzzabccczzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4078
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4079
        checkReplaceAll("(?<gn>ab)(c*)",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4080
                        "zzzabccczzzabcczzzabccczzz",
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4081
                        "${gn}",
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4082
                        "zzzabzzzabzzzabzzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4083
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4084
        checkReplaceFirst("(?<gn1>ab)(?<gn2>c*)",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4085
                          "zzzabccczzzabcczzzabccczzz",
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4086
                          "${gn2}",
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4087
                          "zzzccczzzabcczzzabccczzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4088
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4089
        checkReplaceAll("(?<gn1>ab)(?<gn2>c*)",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4090
                        "zzzabccczzzabcczzzabccczzz",
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4091
                        "${gn2}",
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4092
                        "zzzccczzzcczzzccczzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4093
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4094
        //toSupplementaries("(ab)(c*)"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4095
        checkReplaceFirst("(?<gn1>" + toSupplementaries("ab") +
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4096
                           ")(?<gn2>" + toSupplementaries("c") + "*)",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4097
                          toSupplementaries("abccczzzabcczzzabccc"),
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4098
                          "${gn1}",
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4099
                          toSupplementaries("abzzzabcczzzabccc"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4100
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4101
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4102
        checkReplaceAll("(?<gn1>" + toSupplementaries("ab") +
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4103
                        ")(?<gn2>" + toSupplementaries("c") + "*)",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4104
                        toSupplementaries("abccczzzabcczzzabccc"),
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4105
                        "${gn1}",
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4106
                        toSupplementaries("abzzzabzzzab"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4107
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4108
        checkReplaceFirst("(?<gn1>" + toSupplementaries("ab") +
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4109
                           ")(?<gn2>" + toSupplementaries("c") + "*)",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4110
                          toSupplementaries("abccczzzabcczzzabccc"),
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4111
                          "${gn2}",
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4112
                          toSupplementaries("ccczzzabcczzzabccc"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4113
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4114
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4115
        checkReplaceAll("(?<gn1>" + toSupplementaries("ab") +
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4116
                        ")(?<gn2>" + toSupplementaries("c") + "*)",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4117
                        toSupplementaries("abccczzzabcczzzabccc"),
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4118
                        "${gn2}",
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4119
                        toSupplementaries("ccczzzcczzzccc"));
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4120
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4121
        checkReplaceFirst("(?<dog>Dog)AndCat",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4122
                          "zzzDogAndCatzzzDogAndCatzzz",
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4123
                          "${dog}",
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4124
                          "zzzDogzzzDogAndCatzzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4125
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4126
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4127
        checkReplaceAll("(?<dog>Dog)AndCat",
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4128
                          "zzzDogAndCatzzzDogAndCatzzz",
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4129
                          "${dog}",
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4130
                          "zzzDogzzzDogzzz");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4131
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4132
        // backref in Matcher & String
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4133
        if (!"abcdefghij".replaceFirst("cd(?<gn>ef)gh", "${gn}").equals("abefij") ||
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4134
            !"abbbcbdbefgh".replaceAll("(?<gn>[a-e])b", "${gn}").equals("abcdefgh"))
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4135
            failCount++;
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4136
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4137
        // negative
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4138
        checkExpectedFail("(?<groupnamehasnoascii.in>abc)(def)");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4139
        checkExpectedFail("(?<groupnamehasnoascii_in>abc)(def)");
4161
679d00486dc6 6878475: Better syntax for the named capture group in regex
sherman
parents: 2290
diff changeset
  4140
        checkExpectedFail("(?<6groupnamestartswithdigit>abc)(def)");
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4141
        checkExpectedFail("(?<gname>abc)(def)\\k<gnameX>");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4142
        checkExpectedFail("(?<gname>abc)(?<gname>def)\\k<gnameX>");
17434
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4143
        checkExpectedIAE(Pattern.compile("(?<gname>abc)(def)").matcher("abcdef"),
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4144
                         "gnameX");
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4145
        checkExpectedNPE(Pattern.compile("(?<gname>abc)(def)").matcher("abcdef"));
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4146
        report("NamedGroupCapture");
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4147
    }
4820
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4148
37882
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4149
    // This is for bug 6919132
4820
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4150
    private static void nonBmpClassComplementTest() throws Exception {
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4151
        Pattern p = Pattern.compile("\\P{Lu}");
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4152
        Matcher m = p.matcher(new String(new int[] {0x1d400}, 0, 1));
37882
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4153
4820
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4154
        if (m.find() && m.start() == 1)
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4155
            failCount++;
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4156
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4157
        // from a unicode category
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4158
        p = Pattern.compile("\\P{Lu}");
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4159
        m = p.matcher(new String(new int[] {0x1d400}, 0, 1));
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4160
        if (m.find())
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4161
            failCount++;
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4162
        if (!m.hitEnd())
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4163
            failCount++;
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4164
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4165
        // block
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4166
        p = Pattern.compile("\\P{InMathematicalAlphanumericSymbols}");
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4167
        m = p.matcher(new String(new int[] {0x1d400}, 0, 1));
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4168
        if (m.find() && m.start() == 1)
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4169
            failCount++;
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4170
37882
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4171
        p = Pattern.compile("\\P{sc=GRANTHA}");
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4172
        m = p.matcher(new String(new int[] {0x11350}, 0, 1));
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4173
        if (m.find() && m.start() == 1)
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4174
            failCount++;
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4175
4820
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4176
        report("NonBmpClassComplement");
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4177
    }
e32f5d2ba062 6919132: Regex \P{Lu} selects half of a surrogate pari
sherman
parents: 4161
diff changeset
  4178
5610
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4179
    private static void unicodePropertiesTest() throws Exception {
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4180
        // different forms
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4181
        if (!Pattern.compile("\\p{IsLu}").matcher("A").matches() ||
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4182
            !Pattern.compile("\\p{Lu}").matcher("A").matches() ||
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4183
            !Pattern.compile("\\p{gc=Lu}").matcher("A").matches() ||
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4184
            !Pattern.compile("\\p{general_category=Lu}").matcher("A").matches() ||
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4185
            !Pattern.compile("\\p{IsLatin}").matcher("B").matches() ||
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4186
            !Pattern.compile("\\p{sc=Latin}").matcher("B").matches() ||
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4187
            !Pattern.compile("\\p{script=Latin}").matcher("B").matches() ||
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4188
            !Pattern.compile("\\p{InBasicLatin}").matcher("c").matches() ||
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4189
            !Pattern.compile("\\p{blk=BasicLatin}").matcher("c").matches() ||
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4190
            !Pattern.compile("\\p{block=BasicLatin}").matcher("c").matches())
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4191
            failCount++;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4192
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4193
        Matcher common  = Pattern.compile("\\p{script=Common}").matcher("");
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4194
        Matcher unknown = Pattern.compile("\\p{IsUnknown}").matcher("");
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4195
        Matcher lastSM  = common;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4196
        Character.UnicodeScript lastScript = Character.UnicodeScript.of(0);
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4197
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4198
        Matcher latin  = Pattern.compile("\\p{block=basic_latin}").matcher("");
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4199
        Matcher greek  = Pattern.compile("\\p{InGreek}").matcher("");
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4200
        Matcher lastBM = latin;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4201
        Character.UnicodeBlock lastBlock = Character.UnicodeBlock.of(0);
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4202
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4203
        for (int cp = 1; cp < Character.MAX_CODE_POINT; cp++) {
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4204
            if (cp >= 0x30000 && (cp & 0x70) == 0){
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4205
                continue;  // only pick couple code points, they are the same
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4206
            }
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4207
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4208
            // Unicode Script
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4209
            Character.UnicodeScript script = Character.UnicodeScript.of(cp);
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4210
            Matcher m;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4211
            String str = new String(Character.toChars(cp));
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4212
            if (script == lastScript) {
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4213
                 m = lastSM;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4214
                 m.reset(str);
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4215
            } else {
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4216
                 m  = Pattern.compile("\\p{Is" + script.name() + "}").matcher(str);
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4217
            }
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4218
            if (!m.matches()) {
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4219
                failCount++;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4220
            }
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4221
            Matcher other = (script == Character.UnicodeScript.COMMON)? unknown : common;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4222
            other.reset(str);
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4223
            if (other.matches()) {
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4224
                failCount++;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4225
            }
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4226
            lastSM = m;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4227
            lastScript = script;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4228
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4229
            // Unicode Block
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4230
            Character.UnicodeBlock block = Character.UnicodeBlock.of(cp);
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4231
            if (block == null) {
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4232
                //System.out.printf("Not a Block: cp=%x%n", cp);
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4233
                continue;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4234
            }
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4235
            if (block == lastBlock) {
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4236
                 m = lastBM;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4237
                 m.reset(str);
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4238
            } else {
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4239
                 m  = Pattern.compile("\\p{block=" + block.toString() + "}").matcher(str);
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4240
            }
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4241
            if (!m.matches()) {
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4242
                failCount++;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4243
            }
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4244
            other = (block == Character.UnicodeBlock.BASIC_LATIN)? greek : latin;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4245
            other.reset(str);
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4246
            if (other.matches()) {
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4247
                failCount++;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4248
            }
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4249
            lastBM = m;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4250
            lastBlock = block;
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4251
        }
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4252
        report("unicodeProperties");
fd2427610c7f 6945564: Unicode script support in Character class
sherman
parents: 5295
diff changeset
  4253
    }
8173
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4254
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4255
    private static void unicodeHexNotationTest() throws Exception {
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4256
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4257
        // negative
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4258
        checkExpectedFail("\\x{-23}");
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4259
        checkExpectedFail("\\x{110000}");
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4260
        checkExpectedFail("\\x{}");
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4261
        checkExpectedFail("\\x{AB[ef]");
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4262
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4263
        // codepoint
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4264
        check("^\\x{1033c}$",              "\uD800\uDF3C", true);
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4265
        check("^\\xF0\\x90\\x8C\\xBC$",    "\uD800\uDF3C", false);
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4266
        check("^\\x{D800}\\x{DF3c}+$",     "\uD800\uDF3C", false);
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4267
        check("^\\xF0\\x90\\x8C\\xBC$",    "\uD800\uDF3C", false);
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4268
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4269
        // in class
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4270
        check("^[\\x{D800}\\x{DF3c}]+$",   "\uD800\uDF3C", false);
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4271
        check("^[\\xF0\\x90\\x8C\\xBC]+$", "\uD800\uDF3C", false);
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4272
        check("^[\\x{D800}\\x{DF3C}]+$",   "\uD800\uDF3C", false);
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4273
        check("^[\\x{DF3C}\\x{D800}]+$",   "\uD800\uDF3C", false);
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4274
        check("^[\\x{D800}\\x{DF3C}]+$",   "\uDF3C\uD800", true);
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4275
        check("^[\\x{DF3C}\\x{D800}]+$",   "\uDF3C\uD800", true);
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4276
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4277
        for (int cp = 0; cp <= 0x10FFFF; cp++) {
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4278
             String s = "A" + new String(Character.toChars(cp)) + "B";
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4279
             String hexUTF16 = (cp <= 0xFFFF)? String.format("\\u%04x", cp)
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4280
                                             : String.format("\\u%04x\\u%04x",
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4281
                                               (int) Character.toChars(cp)[0],
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4282
                                               (int) Character.toChars(cp)[1]);
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4283
             String hexCodePoint = "\\x{" + Integer.toHexString(cp) + "}";
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4284
             if (!Pattern.matches("A" + hexUTF16 + "B", s))
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4285
                 failCount++;
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4286
             if (!Pattern.matches("A[" + hexUTF16 + "]B", s))
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4287
                 failCount++;
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4288
             if (!Pattern.matches("A" + hexCodePoint + "B", s))
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4289
                 failCount++;
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4290
             if (!Pattern.matches("A[" + hexCodePoint + "]B", s))
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4291
                 failCount++;
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4292
         }
a3a39b98e05a 7014645: Support perl style Unicode hex notation \x{...}
sherman
parents: 7668
diff changeset
  4293
         report("unicodeHexNotation");
9536
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4294
    }
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4295
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4296
    private static void unicodeClassesTest() throws Exception {
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4297
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4298
        Matcher lower  = Pattern.compile("\\p{Lower}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4299
        Matcher upper  = Pattern.compile("\\p{Upper}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4300
        Matcher ASCII  = Pattern.compile("\\p{ASCII}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4301
        Matcher alpha  = Pattern.compile("\\p{Alpha}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4302
        Matcher digit  = Pattern.compile("\\p{Digit}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4303
        Matcher alnum  = Pattern.compile("\\p{Alnum}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4304
        Matcher punct  = Pattern.compile("\\p{Punct}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4305
        Matcher graph  = Pattern.compile("\\p{Graph}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4306
        Matcher print  = Pattern.compile("\\p{Print}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4307
        Matcher blank  = Pattern.compile("\\p{Blank}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4308
        Matcher cntrl  = Pattern.compile("\\p{Cntrl}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4309
        Matcher xdigit = Pattern.compile("\\p{XDigit}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4310
        Matcher space  = Pattern.compile("\\p{Space}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4311
        Matcher bound  = Pattern.compile("\\b").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4312
        Matcher word   = Pattern.compile("\\w++").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4313
        // UNICODE_CHARACTER_CLASS
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4314
        Matcher lowerU  = Pattern.compile("\\p{Lower}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4315
        Matcher upperU  = Pattern.compile("\\p{Upper}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4316
        Matcher ASCIIU  = Pattern.compile("\\p{ASCII}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4317
        Matcher alphaU  = Pattern.compile("\\p{Alpha}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4318
        Matcher digitU  = Pattern.compile("\\p{Digit}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4319
        Matcher alnumU  = Pattern.compile("\\p{Alnum}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4320
        Matcher punctU  = Pattern.compile("\\p{Punct}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4321
        Matcher graphU  = Pattern.compile("\\p{Graph}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4322
        Matcher printU  = Pattern.compile("\\p{Print}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4323
        Matcher blankU  = Pattern.compile("\\p{Blank}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4324
        Matcher cntrlU  = Pattern.compile("\\p{Cntrl}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4325
        Matcher xdigitU = Pattern.compile("\\p{XDigit}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4326
        Matcher spaceU  = Pattern.compile("\\p{Space}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4327
        Matcher boundU  = Pattern.compile("\\b", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4328
        Matcher wordU   = Pattern.compile("\\w", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4329
        // embedded flag (?U)
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4330
        Matcher lowerEU  = Pattern.compile("(?U)\\p{Lower}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4331
        Matcher graphEU  = Pattern.compile("(?U)\\p{Graph}", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4332
        Matcher wordEU   = Pattern.compile("(?U)\\w", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4333
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4334
        Matcher bwb    = Pattern.compile("\\b\\w\\b").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4335
        Matcher bwbU   = Pattern.compile("\\b\\w++\\b", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4336
        Matcher bwbEU  = Pattern.compile("(?U)\\b\\w++\\b", Pattern.UNICODE_CHARACTER_CLASS).matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4337
        // properties
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4338
        Matcher lowerP  = Pattern.compile("\\p{IsLowerCase}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4339
        Matcher upperP  = Pattern.compile("\\p{IsUpperCase}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4340
        Matcher titleP  = Pattern.compile("\\p{IsTitleCase}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4341
        Matcher letterP = Pattern.compile("\\p{IsLetter}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4342
        Matcher alphaP  = Pattern.compile("\\p{IsAlphabetic}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4343
        Matcher ideogP  = Pattern.compile("\\p{IsIdeographic}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4344
        Matcher cntrlP  = Pattern.compile("\\p{IsControl}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4345
        Matcher spaceP  = Pattern.compile("\\p{IsWhiteSpace}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4346
        Matcher definedP = Pattern.compile("\\p{IsAssigned}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4347
        Matcher nonCCPP = Pattern.compile("\\p{IsNoncharacterCodePoint}").matcher("");
17434
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4348
        Matcher joinCrtl = Pattern.compile("\\p{IsJoinControl}").matcher("");
9536
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4349
        // javaMethod
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4350
        Matcher lowerJ  = Pattern.compile("\\p{javaLowerCase}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4351
        Matcher upperJ  = Pattern.compile("\\p{javaUpperCase}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4352
        Matcher alphaJ  = Pattern.compile("\\p{javaAlphabetic}").matcher("");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4353
        Matcher ideogJ  = Pattern.compile("\\p{javaIdeographic}").matcher("");
38450
516990ff3a4c 8143282: \p{Cn} unassigned code points should be included in \p{C}
sherman
parents: 37882
diff changeset
  4354
        // GC/C
516990ff3a4c 8143282: \p{Cn} unassigned code points should be included in \p{C}
sherman
parents: 37882
diff changeset
  4355
        Matcher gcC  = Pattern.compile("\\p{C}").matcher("");
9536
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4356
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4357
        for (int cp = 1; cp < 0x30000; cp++) {
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4358
            String str = new String(Character.toChars(cp));
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4359
            int type = Character.getType(cp);
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4360
            if (// lower
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4361
                POSIX_ASCII.isLower(cp)   != lower.reset(str).matches()  ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4362
                Character.isLowerCase(cp) != lowerU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4363
                Character.isLowerCase(cp) != lowerP.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4364
                Character.isLowerCase(cp) != lowerEU.reset(str).matches()||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4365
                Character.isLowerCase(cp) != lowerJ.reset(str).matches()||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4366
                // upper
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4367
                POSIX_ASCII.isUpper(cp)   != upper.reset(str).matches()  ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4368
                POSIX_Unicode.isUpper(cp) != upperU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4369
                Character.isUpperCase(cp) != upperP.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4370
                Character.isUpperCase(cp) != upperJ.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4371
                // alpha
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4372
                POSIX_ASCII.isAlpha(cp)   != alpha.reset(str).matches()  ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4373
                POSIX_Unicode.isAlpha(cp) != alphaU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4374
                Character.isAlphabetic(cp)!= alphaP.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4375
                Character.isAlphabetic(cp)!= alphaJ.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4376
                // digit
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4377
                POSIX_ASCII.isDigit(cp)   != digit.reset(str).matches()  ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4378
                Character.isDigit(cp)     != digitU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4379
                // alnum
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4380
                POSIX_ASCII.isAlnum(cp)   != alnum.reset(str).matches()  ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4381
                POSIX_Unicode.isAlnum(cp) != alnumU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4382
                // punct
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4383
                POSIX_ASCII.isPunct(cp)   != punct.reset(str).matches()  ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4384
                POSIX_Unicode.isPunct(cp) != punctU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4385
                // graph
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4386
                POSIX_ASCII.isGraph(cp)   != graph.reset(str).matches()  ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4387
                POSIX_Unicode.isGraph(cp) != graphU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4388
                POSIX_Unicode.isGraph(cp) != graphEU.reset(str).matches()||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4389
                // blank
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4390
                POSIX_ASCII.isType(cp, POSIX_ASCII.BLANK)
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4391
                                          != blank.reset(str).matches()  ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4392
                POSIX_Unicode.isBlank(cp) != blankU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4393
                // print
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4394
                POSIX_ASCII.isPrint(cp)   != print.reset(str).matches()  ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4395
                POSIX_Unicode.isPrint(cp) != printU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4396
                // cntrl
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4397
                POSIX_ASCII.isCntrl(cp)   != cntrl.reset(str).matches()  ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4398
                POSIX_Unicode.isCntrl(cp) != cntrlU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4399
                (Character.CONTROL == type) != cntrlP.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4400
                // hexdigit
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4401
                POSIX_ASCII.isHexDigit(cp)   != xdigit.reset(str).matches()  ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4402
                POSIX_Unicode.isHexDigit(cp) != xdigitU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4403
                // space
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4404
                POSIX_ASCII.isSpace(cp)   != space.reset(str).matches()  ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4405
                POSIX_Unicode.isSpace(cp) != spaceU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4406
                POSIX_Unicode.isSpace(cp) != spaceP.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4407
                // word
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4408
                POSIX_ASCII.isWord(cp)   != word.reset(str).matches()  ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4409
                POSIX_Unicode.isWord(cp) != wordU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4410
                POSIX_Unicode.isWord(cp) != wordEU.reset(str).matches()||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4411
                // bwordb
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4412
                POSIX_ASCII.isWord(cp) != bwb.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4413
                POSIX_Unicode.isWord(cp) != bwbU.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4414
                // properties
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4415
                Character.isTitleCase(cp) != titleP.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4416
                Character.isLetter(cp)    != letterP.reset(str).matches()||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4417
                Character.isIdeographic(cp) != ideogP.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4418
                Character.isIdeographic(cp) != ideogJ.reset(str).matches() ||
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4419
                (Character.UNASSIGNED == type) == definedP.reset(str).matches() ||
17434
4a04d7127e80 8013252: Regex Matcher .start and .end should be accessible by group name
sherman
parents: 17183
diff changeset
  4420
                POSIX_Unicode.isNoncharacterCodePoint(cp) != nonCCPP.reset(str).matches() ||
38450
516990ff3a4c 8143282: \p{Cn} unassigned code points should be included in \p{C}
sherman
parents: 37882
diff changeset
  4421
                POSIX_Unicode.isJoinControl(cp) != joinCrtl.reset(str).matches() ||
516990ff3a4c 8143282: \p{Cn} unassigned code points should be included in \p{C}
sherman
parents: 37882
diff changeset
  4422
                // gc_C
516990ff3a4c 8143282: \p{Cn} unassigned code points should be included in \p{C}
sherman
parents: 37882
diff changeset
  4423
                (Character.CONTROL == type || Character.FORMAT == type ||
516990ff3a4c 8143282: \p{Cn} unassigned code points should be included in \p{C}
sherman
parents: 37882
diff changeset
  4424
                 Character.PRIVATE_USE == type || Character.SURROGATE == type ||
516990ff3a4c 8143282: \p{Cn} unassigned code points should be included in \p{C}
sherman
parents: 37882
diff changeset
  4425
                 Character.UNASSIGNED == type)
516990ff3a4c 8143282: \p{Cn} unassigned code points should be included in \p{C}
sherman
parents: 37882
diff changeset
  4426
                != gcC.reset(str).matches()) {
9536
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4427
                failCount++;
38450
516990ff3a4c 8143282: \p{Cn} unassigned code points should be included in \p{C}
sherman
parents: 37882
diff changeset
  4428
            }
9536
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4429
        }
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4430
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4431
        // bounds/word align
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4432
        twoFindIndexes(" \u0180sherman\u0400 ", bound, 1, 10);
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4433
        if (!bwbU.reset("\u0180sherman\u0400").matches())
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4434
            failCount++;
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4435
        twoFindIndexes(" \u0180sh\u0345erman\u0400 ", bound, 1, 11);
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4436
        if (!bwbU.reset("\u0180sh\u0345erman\u0400").matches())
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4437
            failCount++;
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4438
        twoFindIndexes(" \u0724\u0739\u0724 ", bound, 1, 4);
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4439
        if (!bwbU.reset("\u0724\u0739\u0724").matches())
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4440
            failCount++;
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4441
        if (!bwbEU.reset("\u0724\u0739\u0724").matches())
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4442
            failCount++;
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4443
        report("unicodePredefinedClasses");
648c9add2a74 7039066: j.u.rgex does not match TR18 RL1.4 Simple Word Boundaries and RL1.2 Properties
sherman
parents: 9035
diff changeset
  4444
    }
12675
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4445
35783
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4446
    private static void unicodeCharacterNameTest() throws Exception {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4447
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4448
        for (int cp = 0; cp < Character.MAX_CODE_POINT; cp++) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4449
            if (!Character.isValidCodePoint(cp) ||
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4450
                Character.getType(cp) == Character.UNASSIGNED)
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4451
                continue;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4452
            String str = new String(Character.toChars(cp));
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4453
            // single
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4454
            String p = "\\N{" + Character.getName(cp) + "}";
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4455
            if (!Pattern.compile(p).matcher(str).matches()) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4456
                failCount++;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4457
            }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4458
            // class[c]
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4459
            p = "[\\N{" + Character.getName(cp) + "}]";
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4460
            if (!Pattern.compile(p).matcher(str).matches()) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4461
                failCount++;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4462
            }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4463
        }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4464
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4465
        // range
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4466
        for (int i = 0; i < 10; i++) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4467
            int start = generator.nextInt(20);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4468
            int end = start + generator.nextInt(200);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4469
            String p = "[\\N{" + Character.getName(start) + "}-\\N{" + Character.getName(end) + "}]";
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4470
            String str;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4471
            for (int cp = start; cp < end; cp++) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4472
                str = new String(Character.toChars(cp));
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4473
                if (!Pattern.compile(p).matcher(str).matches()) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4474
                    failCount++;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4475
                }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4476
            }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4477
            str = new String(Character.toChars(end + 10));
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4478
            if (Pattern.compile(p).matcher(str).matches()) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4479
                failCount++;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4480
            }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4481
        }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4482
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4483
        // slice
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4484
        for (int i = 0; i < 10; i++) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4485
            int n = generator.nextInt(256);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4486
            int[] buf = new int[n];
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4487
            StringBuffer sb = new StringBuffer(1024);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4488
            for (int j = 0; j < n; j++) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4489
                int cp = generator.nextInt(1000);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4490
                if (!Character.isValidCodePoint(cp) ||
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4491
                    Character.getType(cp) == Character.UNASSIGNED)
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4492
                    cp = 0x4e00;    // just use 4e00
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4493
                sb.append("\\N{" + Character.getName(cp) + "}");
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4494
                buf[j] = cp;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4495
            }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4496
            String p = sb.toString();
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4497
            String str = new String(buf, 0, buf.length);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4498
            if (!Pattern.compile(p).matcher(str).matches()) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4499
                failCount++;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4500
            }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4501
        }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4502
        report("unicodeCharacterName");
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4503
    }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4504
12675
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4505
    private static void horizontalAndVerticalWSTest() throws Exception {
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4506
        String hws = new String (new char[] {
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4507
                                     0x09, 0x20, 0xa0, 0x1680, 0x180e,
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4508
                                     0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005,
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4509
                                     0x2006, 0x2007, 0x2008, 0x2009, 0x200a,
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4510
                                     0x202f, 0x205f, 0x3000 });
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4511
        String vws = new String (new char[] {
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4512
                                     0x0a, 0x0b, 0x0c, 0x0d, 0x85, 0x2028, 0x2029 });
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4513
        if (!Pattern.compile("\\h+").matcher(hws).matches() ||
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4514
            !Pattern.compile("[\\h]+").matcher(hws).matches())
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4515
            failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4516
        if (Pattern.compile("\\H").matcher(hws).find() ||
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4517
            Pattern.compile("[\\H]").matcher(hws).find())
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4518
            failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4519
        if (!Pattern.compile("\\v+").matcher(vws).matches() ||
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4520
            !Pattern.compile("[\\v]+").matcher(vws).matches())
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4521
            failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4522
        if (Pattern.compile("\\V").matcher(vws).find() ||
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4523
            Pattern.compile("[\\V]").matcher(vws).find())
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4524
            failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4525
        String prefix = "abcd";
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4526
        String suffix = "efgh";
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4527
        String ng = "A";
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4528
        for (int i = 0; i < hws.length(); i++) {
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4529
            String c = String.valueOf(hws.charAt(i));
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4530
            Matcher m = Pattern.compile("\\h").matcher(prefix + c + suffix);
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4531
            if (!m.find() || !c.equals(m.group()))
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4532
                failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4533
            m = Pattern.compile("[\\h]").matcher(prefix + c + suffix);
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4534
            if (!m.find() || !c.equals(m.group()))
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4535
                failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4536
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4537
            m = Pattern.compile("\\H").matcher(hws.substring(0, i) + ng + hws.substring(i));
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4538
            if (!m.find() || !ng.equals(m.group()))
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4539
                failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4540
            m = Pattern.compile("[\\H]").matcher(hws.substring(0, i) + ng + hws.substring(i));
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4541
            if (!m.find() || !ng.equals(m.group()))
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4542
                failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4543
        }
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4544
        for (int i = 0; i < vws.length(); i++) {
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4545
            String c = String.valueOf(vws.charAt(i));
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4546
            Matcher m = Pattern.compile("\\v").matcher(prefix + c + suffix);
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4547
            if (!m.find() || !c.equals(m.group()))
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4548
                failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4549
            m = Pattern.compile("[\\v]").matcher(prefix + c + suffix);
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4550
            if (!m.find() || !c.equals(m.group()))
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4551
                failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4552
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4553
            m = Pattern.compile("\\V").matcher(vws.substring(0, i) + ng + vws.substring(i));
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4554
            if (!m.find() || !ng.equals(m.group()))
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4555
                failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4556
            m = Pattern.compile("[\\V]").matcher(vws.substring(0, i) + ng + vws.substring(i));
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4557
            if (!m.find() || !ng.equals(m.group()))
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4558
                failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4559
        }
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4560
        // \v in range is interpreted as 0x0B. This is the undocumented behavior
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4561
        if (!Pattern.compile("[\\v-\\v]").matcher(String.valueOf((char)0x0B)).matches())
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4562
            failCount++;
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4563
        report("horizontalAndVerticalWSTest");
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4564
    }
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4565
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4566
    private static void linebreakTest() throws Exception {
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4567
        String linebreaks = new String (new char[] {
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4568
            0x0A, 0x0B, 0x0C, 0x0D, 0x85, 0x2028, 0x2029 });
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4569
        String crnl = "\r\n";
44122
65a14579a2ae 8176029: Linebreak matcher is not equivalent to the pattern as stated in javadoc
sherman
parents: 38777
diff changeset
  4570
        if (!(Pattern.compile("\\R+").matcher(linebreaks).matches() &&
65a14579a2ae 8176029: Linebreak matcher is not equivalent to the pattern as stated in javadoc
sherman
parents: 38777
diff changeset
  4571
              Pattern.compile("\\R").matcher(crnl).matches() &&
65a14579a2ae 8176029: Linebreak matcher is not equivalent to the pattern as stated in javadoc
sherman
parents: 38777
diff changeset
  4572
              Pattern.compile("\\Rabc").matcher(crnl + "abc").matches() &&
65a14579a2ae 8176029: Linebreak matcher is not equivalent to the pattern as stated in javadoc
sherman
parents: 38777
diff changeset
  4573
              Pattern.compile("\\Rabc").matcher("\rabc").matches() &&
65a14579a2ae 8176029: Linebreak matcher is not equivalent to the pattern as stated in javadoc
sherman
parents: 38777
diff changeset
  4574
              Pattern.compile("\\R\\R").matcher(crnl).matches() &&  // backtracking
65a14579a2ae 8176029: Linebreak matcher is not equivalent to the pattern as stated in javadoc
sherman
parents: 38777
diff changeset
  4575
              Pattern.compile("\\R\\n").matcher(crnl).matches()) && // backtracking
65a14579a2ae 8176029: Linebreak matcher is not equivalent to the pattern as stated in javadoc
sherman
parents: 38777
diff changeset
  4576
              !Pattern.compile("((?<!\\R)\\s)*").matcher(crnl).matches()) { // #8176029
65a14579a2ae 8176029: Linebreak matcher is not equivalent to the pattern as stated in javadoc
sherman
parents: 38777
diff changeset
  4577
            failCount++;
65a14579a2ae 8176029: Linebreak matcher is not equivalent to the pattern as stated in javadoc
sherman
parents: 38777
diff changeset
  4578
        }
12675
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4579
        report("linebreakTest");
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4580
    }
3b7d71495649 7014640: To add a metachar \R for line ending and character classes for vertical/horizontal ws \v \V \h \H
sherman
parents: 12432
diff changeset
  4581
13554
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4582
    // #7189363
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4583
    private static void branchTest() throws Exception {
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4584
        if (!Pattern.compile("(a)?bc|d").matcher("d").find() ||     // greedy
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4585
            !Pattern.compile("(a)+bc|d").matcher("d").find() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4586
            !Pattern.compile("(a)*bc|d").matcher("d").find() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4587
            !Pattern.compile("(a)??bc|d").matcher("d").find() ||    // reluctant
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4588
            !Pattern.compile("(a)+?bc|d").matcher("d").find() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4589
            !Pattern.compile("(a)*?bc|d").matcher("d").find() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4590
            !Pattern.compile("(a)?+bc|d").matcher("d").find() ||    // possessive
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4591
            !Pattern.compile("(a)++bc|d").matcher("d").find() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4592
            !Pattern.compile("(a)*+bc|d").matcher("d").find() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4593
            !Pattern.compile("(a)?bc|d").matcher("d").matches() ||  // greedy
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4594
            !Pattern.compile("(a)+bc|d").matcher("d").matches() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4595
            !Pattern.compile("(a)*bc|d").matcher("d").matches() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4596
            !Pattern.compile("(a)??bc|d").matcher("d").matches() || // reluctant
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4597
            !Pattern.compile("(a)+?bc|d").matcher("d").matches() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4598
            !Pattern.compile("(a)*?bc|d").matcher("d").matches() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4599
            !Pattern.compile("(a)?+bc|d").matcher("d").matches() || // possessive
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4600
            !Pattern.compile("(a)++bc|d").matcher("d").matches() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4601
            !Pattern.compile("(a)*+bc|d").matcher("d").matches() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4602
            !Pattern.compile("(a)?bc|de").matcher("de").find() ||   // others
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4603
            !Pattern.compile("(a)??bc|de").matcher("de").find() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4604
            !Pattern.compile("(a)?bc|de").matcher("de").matches() ||
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4605
            !Pattern.compile("(a)??bc|de").matcher("de").matches())
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4606
            failCount++;
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4607
        report("branchTest");
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4608
    }
ad737436c54a 7189363: Regex Pattern compilation buggy for special sequences
sherman
parents: 12675
diff changeset
  4609
17183
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4610
    // This test is for 8007395
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4611
    private static void groupCurlyNotFoundSuppTest() throws Exception {
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4612
        String input = "test this as \ud83d\ude0d";
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4613
        for (String pStr : new String[] { "test(.)+(@[a-zA-Z.]+)",
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4614
                                          "test(.)*(@[a-zA-Z.]+)",
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4615
                                          "test([^B])+(@[a-zA-Z.]+)",
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4616
                                          "test([^B])*(@[a-zA-Z.]+)",
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4617
                                          "test(\\P{IsControl})+(@[a-zA-Z.]+)",
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4618
                                          "test(\\P{IsControl})*(@[a-zA-Z.]+)",
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4619
                                        }) {
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4620
            Matcher m = Pattern.compile(pStr, Pattern.CASE_INSENSITIVE)
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4621
                               .matcher(input);
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4622
            try {
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4623
                if (m.find()) {
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4624
                    failCount++;
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4625
                }
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4626
            } catch (Exception x) {
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4627
                failCount++;
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4628
            }
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4629
        }
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4630
        report("GroupCurly NotFoundSupp");
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4631
    }
1e21e0bc10e7 8007395: StringIndexOutofBoundsException in Match.find() when input String contains surrogate UTF-16 characters
sherman
parents: 14342
diff changeset
  4632
19604
f96e3aef2081 8023647: "abc1c".matches("(\\w)+1\\1")) returns false
sherman
parents: 17447
diff changeset
  4633
    // This test is for 8023647
f96e3aef2081 8023647: "abc1c".matches("(\\w)+1\\1")) returns false
sherman
parents: 17447
diff changeset
  4634
    private static void groupCurlyBackoffTest() throws Exception {
f96e3aef2081 8023647: "abc1c".matches("(\\w)+1\\1")) returns false
sherman
parents: 17447
diff changeset
  4635
        if (!"abc1c".matches("(\\w)+1\\1") ||
f96e3aef2081 8023647: "abc1c".matches("(\\w)+1\\1")) returns false
sherman
parents: 17447
diff changeset
  4636
            "abc11".matches("(\\w)+1\\1")) {
f96e3aef2081 8023647: "abc1c".matches("(\\w)+1\\1")) returns false
sherman
parents: 17447
diff changeset
  4637
            failCount++;
f96e3aef2081 8023647: "abc1c".matches("(\\w)+1\\1")) returns false
sherman
parents: 17447
diff changeset
  4638
        }
f96e3aef2081 8023647: "abc1c".matches("(\\w)+1\\1")) returns false
sherman
parents: 17447
diff changeset
  4639
        report("GroupCurly backoff");
f96e3aef2081 8023647: "abc1c".matches("(\\w)+1\\1")) returns false
sherman
parents: 17447
diff changeset
  4640
    }
f96e3aef2081 8023647: "abc1c".matches("(\\w)+1\\1")) returns false
sherman
parents: 17447
diff changeset
  4641
17447
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4642
    // This test is for 8012646
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4643
    private static void patternAsPredicate() throws Exception {
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4644
        Predicate<String> p = Pattern.compile("[a-z]+").asPredicate();
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4645
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4646
        if (p.test("")) {
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4647
            failCount++;
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4648
        }
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4649
        if (!p.test("word")) {
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4650
            failCount++;
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4651
        }
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4652
        if (p.test("1234")) {
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4653
            failCount++;
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4654
        }
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4655
        report("Pattern.asPredicate");
3031deba3fbe 8012646: Pattern.splitAsStream
psandoz
parents: 17434
diff changeset
  4656
    }
25523
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4657
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4658
    // This test is for 8035975
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4659
    private static void invalidFlags() throws Exception {
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4660
        for (int flag = 1; flag != 0; flag <<= 1) {
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4661
            switch (flag) {
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4662
            case Pattern.CASE_INSENSITIVE:
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4663
            case Pattern.MULTILINE:
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4664
            case Pattern.DOTALL:
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4665
            case Pattern.UNICODE_CASE:
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4666
            case Pattern.CANON_EQ:
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4667
            case Pattern.UNIX_LINES:
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4668
            case Pattern.LITERAL:
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4669
            case Pattern.UNICODE_CHARACTER_CLASS:
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4670
            case Pattern.COMMENTS:
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4671
                // valid flag, continue
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4672
                break;
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4673
            default:
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4674
                try {
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4675
                    Pattern.compile(".", flag);
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4676
                    failCount++;
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4677
                } catch (IllegalArgumentException expected) {
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4678
                }
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4679
            }
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4680
        }
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4681
        report("Invalid compile flags");
c751d1010164 8035975: Pattern.compile(String, int) fails to throw IllegalArgumentException
igerasim
parents: 23734
diff changeset
  4682
    }
35783
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4683
38777
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4684
    // This test is for 8158482
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4685
    private static void embeddedFlags() throws Exception {
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4686
        try {
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4687
            Pattern.compile("(?i).(?-i).");
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4688
            Pattern.compile("(?m).(?-m).");
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4689
            Pattern.compile("(?s).(?-s).");
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4690
            Pattern.compile("(?d).(?-d).");
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4691
            Pattern.compile("(?u).(?-u).");
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4692
            Pattern.compile("(?c).(?-c).");
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4693
            Pattern.compile("(?x).(?-x).");
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4694
            Pattern.compile("(?U).(?-U).");
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4695
            Pattern.compile("(?imsducxU).(?-imsducxU).");
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4696
        } catch (PatternSyntaxException x) {
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4697
            failCount++;
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4698
        }
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4699
        report("Embedded flags");
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4700
    }
826eb7091523 8158482: regex UNICODE_CHARACTER_CLASS flag cannot be disabled with an embedded flag expression
sherman
parents: 38450
diff changeset
  4701
35783
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4702
    private static void grapheme() throws Exception {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4703
        Files.lines(Paths.get(System.getProperty("test.src", "."),
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4704
                              "GraphemeBreakTest.txt"))
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4705
            .filter( ln -> ln.length() != 0 && !ln.startsWith("#") )
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4706
            .forEach( ln -> {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4707
                    ln = ln.replaceAll("\\s+|\\([a-zA-Z]+\\)|\\[[a-zA-Z]]+\\]|#.*", "");
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4708
                    // System.out.println(str);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4709
                    String[] strs = ln.split("\u00f7|\u00d7");
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4710
                    StringBuilder src = new StringBuilder();
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4711
                    ArrayList<String> graphemes = new ArrayList<>();
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4712
                    StringBuilder buf = new StringBuilder();
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4713
                    int offBk = 0;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4714
                    for (String str : strs) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4715
                        if (str.length() == 0)  // first empty str
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4716
                            continue;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4717
                        int cp = Integer.parseInt(str, 16);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4718
                        src.appendCodePoint(cp);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4719
                        buf.appendCodePoint(cp);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4720
                        offBk += (str.length() + 1);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4721
                        if (ln.charAt(offBk) == '\u00f7') {    // DIV
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4722
                            graphemes.add(buf.toString());
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4723
                            buf = new StringBuilder();
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4724
                        }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4725
                    }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4726
                    Pattern p = Pattern.compile("\\X");
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4727
                    Matcher m = p.matcher(src.toString());
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4728
                    Scanner s = new Scanner(src.toString()).useDelimiter("\\b{g}");
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4729
                    for (String g : graphemes) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4730
                        // System.out.printf("     grapheme:=[%s]%n", g);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4731
                        // (1) test \\X directly
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4732
                        if (!m.find() || !m.group().equals(g)) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4733
                            System.out.println("Failed \\X [" + ln + "] : " + g);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4734
                            failCount++;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4735
                        }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4736
                        // (2) test \\b{g} + \\X  via Scanner
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4737
                        boolean hasNext = s.hasNext(p);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4738
                        // if (!s.hasNext() || !s.next().equals(next)) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4739
                        if (!s.hasNext(p) || !s.next(p).equals(g)) {
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4740
                            System.out.println("Failed b{g} [" + ln + "] : " + g);
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4741
                            failCount++;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4742
                        }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4743
                    }
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4744
                });
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4745
        // some sanity checks
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4746
        if (!Pattern.compile("\\X{10}").matcher("abcdefghij").matches() ||
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4747
            !Pattern.compile("\\b{g}(?:\\X\\b{g}){5}\\b{g}").matcher("abcde").matches() ||
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4748
            !Pattern.compile("(?:\\X\\b{g}){2}").matcher("\ud800\udc00\ud801\udc02").matches())
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4749
            failCount++;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4750
        // make sure "\b{n}" still works
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4751
        if (!Pattern.compile("\\b{1}hello\\b{1} \\b{1}world\\b{1}").matcher("hello world").matches())
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4752
            failCount++;
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4753
        report("Unicode extended grapheme cluster");
2690535d72cc 7071819: To support Extended Grapheme Clusters in Regex
sherman
parents: 34436
diff changeset
  4754
    }
37882
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4755
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4756
    // hangup/timeout if go into exponential backtracking
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4757
    private static void expoBacktracking() throws Exception {
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4758
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4759
        Object[][] patternMatchers = {
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4760
            // 6328855
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4761
            { "(.*\n*)*",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4762
              "this little fine string lets\r\njava.lang.String.matches\r\ncrash\r\n(We don't know why but adding \r* to the regex makes it work again)",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4763
              false },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4764
            // 6192895
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4765
            { " *([a-zA-Z0-9/\\-\\?:\\(\\)\\.,'\\+\\{\\}]+ *)+",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4766
              "Hello World this is a test this is a test this is a test A",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4767
              true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4768
            { " *([a-zA-Z0-9/\\-\\?:\\(\\)\\.,'\\+\\{\\}]+ *)+",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4769
              "Hello World this is a test this is a test this is a test \u4e00 ",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4770
              false },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4771
            { " *([a-z0-9]+ *)+",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4772
              "hello world this is a test this is a test this is a test A",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4773
              false },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4774
            // 4771934 [FIXED] #5013651?
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4775
            { "^(\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,4})+[,;]?)+$",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4776
              "abc@efg.abc,efg@abc.abc,abc@xyz.mno;abc@sdfsd.com",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4777
              true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4778
            // 4866249 [FIXED]
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4779
            { "<\\s*" + "(meta|META)" + "(\\s|[^>])+" + "(CHARSET|charset)=" + "(\\s|[^>])+>",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4780
              "<META http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-5\">",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4781
              true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4782
            { "^(\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,4})+[,;]?)+$",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4783
              "abc@efg.abc,efg@abc.abc,abc@xyz.mno;sdfsd.com",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4784
              false },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4785
            // 6345469
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4786
            { "((<[^>]+>)?(((\\s)?)*(\\&nbsp;)?)*((\\s)?)*)+",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4787
              "&nbsp;&nbsp; < br/> &nbsp; < / p> <p> <html> <adfasfdasdf>&nbsp; </p>",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4788
              true }, // --> matched
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4789
            { "((<[^>]+>)?(((\\s)?)*(\\&nbsp;)?)*((\\s)?)*)+",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4790
              "&nbsp;&nbsp; < br/> &nbsp; < / p> <p> <html> <adfasfdasdf>&nbsp; p </p>",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4791
              false },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4792
            // 5026912
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4793
            { "^\\s*" + "(\\w|\\d|[\\xC0-\\xFF]|/)+" + "\\s+|$",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4794
              "156580451111112225588087755221111111566969655555555",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4795
              false},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4796
            // 6988218
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4797
            { "^([+-]?((0[xX](\\p{XDigit}+))|(((\\p{Digit}+)(\\.)?((\\p{Digit}+)?)([eE][+-]?(\\p{Digit}+))?)|(\\.((\\p{Digit}+))([eE][+-]?(\\p{Digit}+))?)))|[n|N]?'([^']*(?:'')*[^']*)*')",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4798
              "'%)) order by ANGEBOT.ID",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4799
              false},    // find
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4800
            // 6693451
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4801
            { "^(\\s*foo\\s*)*$",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4802
              "foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4803
              true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4804
            { "^(\\s*foo\\s*)*$",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4805
              "foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo fo",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4806
              false
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4807
            },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4808
            // 7006761
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4809
            { "(([0-9A-Z]+)([_]?+)*)*", "FOOOOO_BAAAR_FOOOOOOOOO_BA_", true},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4810
            { "(([0-9A-Z]+)([_]?+)*)*", "FOOOOO_BAAAR_FOOOOOOOOO_BA_ ", false},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4811
            // 8140212
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4812
            { "(?<before>.*)\\{(?<reflection>\\w+):(?<innerMethod>\\w+(\\.?\\w+(\\(((?<args>(('[^']*')|((/|\\w)+))(,(('[^']*')|((/|\\w)+)))*))?\\))?)*)\\}(?<after>.*)",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4813
              "{CeGlobal:getSodCutoff.getGui.getAmqp.getSimpleModeEnabled()",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4814
              false
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4815
            },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4816
            { "^(a+)+$", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", true},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4817
            { "^(a+)+$", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!", false},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4818
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4819
            { "(x+)*y",  "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy", true },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4820
            { "(x+)*y",  "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz", false},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4821
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4822
            { "(x+x+)+y", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy", true},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4823
            { "(x+x+)+y", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz", false},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4824
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4825
            { "(([0-9A-Z]+)([_]?+)*)*", "--------------------------------------", false},
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4826
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4827
            /* not fixed
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4828
            //8132141   --->    second level exponential backtracking
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4829
            { "(h|h|ih(((i|a|c|c|a|i|i|j|b|a|i|b|a|a|j))+h)ahbfhba|c|i)*",
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4830
              "hchcchicihcchciiicichhcichcihcchiihichiciiiihhcchicchhcihchcihiihciichhccciccichcichiihcchcihhicchcciicchcccihiiihhihihihichicihhcciccchihhhcchichchciihiicihciihcccciciccicciiiiiiiiicihhhiiiihchccchchhhhiiihchihcccchhhiiiiiiiicicichicihcciciihichhhhchihciiihhiccccccciciihhichiccchhicchicihihccichicciihcichccihhiciccccccccichhhhihihhcchchihihiihhihihihicichihiiiihhhhihhhchhichiicihhiiiiihchccccchichci" },
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4831
            */
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4832
        };
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4833
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4834
        for (Object[] pm : patternMatchers) {
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4835
            String p = (String)pm[0];
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4836
            String s = (String)pm[1];
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4837
            boolean r = (Boolean)pm[2];
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4838
            if (r != Pattern.compile(p).matcher(s).matches()) {
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4839
                failCount++;
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4840
            }
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4841
        }
e7f3cf12e739 6328855: String: Matches hangs at short and easy Strings containing \r \n
sherman
parents: 35783
diff changeset
  4842
    }
2070
6e9972fbd965 6350801: Add support for named (instead of numbered) capture groups in regular expression
sherman
parents:
diff changeset
  4843
}