blob: ae0ed90530168045dd42cf3a784f010eda892cf8 [file] [log] [blame]
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.checkerframework.checker.regex.qual.Regex;
import org.checkerframework.checker.regex.util.RegexUtil;
public class GroupCounts {
void testGroupCount() {
@Regex(0) String s1 = "abc";
@Regex(1) String s2 = "(abc)";
@Regex(2) String s3 = "()(abc)";
@Regex(3) String s4 = "(abc())()";
@Regex(4) String s5 = "((((abc))))";
@Regex(0) String s7 = "(abc)";
@Regex String s9 = "()()(())";
@Regex(2) String s10 = "()()(())";
@Regex(3) String s11 = "()()(())";
// :: error: (assignment)
@Regex(2) String s6 = "nonregex("; // error
// :: error: (assignment)
@Regex(1) String s8 = "abc"; // error
// :: error: (assignment)
@Regex(3) String s12 = "()()"; // error
// :: error: (assignment)
@Regex(4) String s13 = "(())()"; // error
}
void testPatternCompileGroupCount(@Regex String r, @Regex(3) String r3, @Regex(5) String r5) {
@Regex(5) Pattern p1 = Pattern.compile(r5);
@Regex Pattern p2 = Pattern.compile(r5);
@Regex Pattern p3 = Pattern.compile(r);
// :: error: (assignment)
@Regex(6) Pattern p4 = Pattern.compile(r5); // error
// :: error: (assignment)
@Regex(6) Pattern p5 = Pattern.compile(r3); // error
// Make sure Pattern.compile still works when passed an @UnknownRegex String
// that's actually a regex, with the warning suppressed.
@SuppressWarnings("regex:argument")
Pattern p6 = Pattern.compile("(" + r + ")");
}
void testConcatenationGroupCount(@Regex String r, @Regex(3) String r3, @Regex(5) String r5) {
@Regex(0) String s1 = r + r;
@Regex(3) String s2 = r + r3;
@Regex(8) String s3 = r3 + r5;
// :: error: (assignment)
@Regex(1) String s4 = r + r;
// :: error: (assignment)
@Regex(4) String s5 = r + r3;
// :: error: (assignment)
@Regex(9) String s6 = r3 + r5;
}
void testCompoundConcatenationWithGroups(
@Regex String s0, @Regex(1) String s1, @Regex(3) String s3) {
s0 += s0;
@Regex String test0 = s0;
// :: error: (assignment)
@Regex(1) String test01 = s0;
s0 += s1;
@Regex(1) String test1 = s0;
// :: error: (assignment)
@Regex(2) String test12 = s0;
s1 += s3;
@Regex(4) String test4 = s1;
// :: error: (assignment)
@Regex(5) String test45 = s1;
}
void testAsRegexGroupCounts(String s) {
@Regex String test1 = RegexUtil.asRegex(s);
// :: error: (assignment)
@Regex(1) String test2 = RegexUtil.asRegex(s);
@Regex(3) String test3 = RegexUtil.asRegex(s, 3);
// :: error: (assignment)
@Regex(4) String test4 = RegexUtil.asRegex(s, 3);
}
void testMatcherGroupCounts(
@Regex Matcher m0, @Regex(1) Matcher m1, @Regex(4) Matcher m4, int n) {
m0.end(0);
m0.group(0);
m0.start(0);
// :: error: (group.count)
m0.end(1);
// :: error: (group.count)
m0.group(1);
// :: error: (group.count)
m0.start(1);
m1.start(0);
m1.start(1);
// :: error: (group.count)
m1.start(2);
m4.start(0);
m4.start(2);
m4.start(4);
// :: error: (group.count)
m4.start(5);
// :: warning: (group.count.unknown)
m0.start(n);
}
}