Skip to content

Commit 55f0c6a

Browse files
author
MerkushevKirill
committed
add - tests for range method and case, any, start and end of line
+ move some new tests to separate file
1 parent f9149bc commit 55f0c6a

File tree

5 files changed

+164
-46
lines changed

5 files changed

+164
-46
lines changed

src/main/java/ru/lanwen/verbalregex/VerbalExpression.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,17 +116,16 @@ public Builder any(final String value) {
116116
}
117117

118118
public Builder range(String... pArgs) {
119-
String value = "[";
120-
for (int _to = 1; _to < pArgs.length; _to += 2) {
121-
String from = sanitize((String) pArgs[_to - 1]);
122-
String to = sanitize((String) pArgs[_to]);
119+
StringBuilder value = new StringBuilder("[");
120+
for (int firstInPairPosition = 1; firstInPairPosition < pArgs.length; firstInPairPosition += 2) {
121+
String from = sanitize(pArgs[firstInPairPosition - 1]);
122+
String to = sanitize(pArgs[firstInPairPosition]);
123123

124-
value += from + "-" + to;
124+
value.append(from).append("-").append(to);
125125
}
126-
value += "]";
126+
value.append("]");
127127

128-
this.add(value);
129-
return this;
128+
return this.add(value.toString());
130129
}
131130

132131
public Builder addModifier(final char pModifier) {

src/test/java/ru/lanwen/verbalregex/BasicFunctionalityUnitTest.java

Lines changed: 53 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,25 @@ public void testStartOfLine() {
6767
assertFalse("Doesn't start with a", testRegex.test("ba"));
6868
}
6969

70+
@Test
71+
public void testStartOfLineFalse() {
72+
VerbalExpression testRegex = VerbalExpression.regex()
73+
.startOfLine(false)
74+
.then("a")
75+
.build();
76+
assertThat(testRegex.test("ba"), is(true));
77+
assertThat(testRegex.test("ab"), is(true));
78+
}
79+
80+
@Test
81+
public void testRangeWithMultiplyRanges() throws Exception {
82+
VerbalExpression regex = VerbalExpression.regex().range("a", "z", "A", "Z").build();
83+
84+
assertThat("Regex with multi-range differs from expected", regex.toString(), equalTo("[a-zA-Z]"));
85+
assertThat("Regex don't matches letter", regex.test("b"), is(true));
86+
assertThat("Regex matches digit, but should match only letter", regex.test("1"), is(false));
87+
}
88+
7089
@Test
7190
public void testEndOfLine() {
7291
VerbalExpression testRegex = new VerbalExpression.Builder()
@@ -80,6 +99,18 @@ public void testEndOfLine() {
8099
assertFalse("Doesn't end with a", testRegex.test("ab"));
81100
}
82101

102+
103+
@Test
104+
public void testEndOfLineIsFalse() {
105+
VerbalExpression testRegex = VerbalExpression.regex()
106+
.find("a")
107+
.endOfLine(false)
108+
.build();
109+
assertThat(testRegex.test("ba"), is(true));
110+
assertThat(testRegex.test("ab"), is(true));
111+
}
112+
113+
83114
@Test
84115
public void testMaybe() {
85116
VerbalExpression testRegex = new VerbalExpression.Builder()
@@ -107,6 +138,15 @@ public void testAnyOf() {
107138
assertFalse("Doesn't have an x, y, or z after a", testRegex.test("abc"));
108139
}
109140

141+
142+
@Test
143+
public void testAnySameAsAnyOf() {
144+
VerbalExpression any = VerbalExpression.regex().any("abc").build();
145+
VerbalExpression anyOf = VerbalExpression.regex().anyOf("abc").build();
146+
147+
assertThat("any differs from anyOf", any.toString(), equalTo(anyOf.toString()));
148+
}
149+
110150
@Test
111151
public void testOr() {
112152
VerbalExpression testRegex = new VerbalExpression.Builder()
@@ -182,6 +222,18 @@ public void testWithAnyCase() {
182222
assertTrue("case insensitive", testRegex.test("a"));
183223
}
184224

225+
@Test
226+
public void testWithAnyCaseIsFalse() {
227+
VerbalExpression testRegex = VerbalExpression.regex()
228+
.withAnyCase()
229+
.startOfLine()
230+
.then("a")
231+
.withAnyCase(false)
232+
.build();
233+
234+
assertThat(testRegex.test("A"), is(false));
235+
}
236+
185237
@Test
186238
public void testSearchOneLine() {
187239
VerbalExpression testRegex = VerbalExpression.regex()
@@ -253,16 +305,7 @@ public void testCountWithRange() {
253305
assertThat("regex don't match string", regex.test(text1c), is(false));
254306
}
255307

256-
257-
@Test(expected = IndexOutOfBoundsException.class)
258-
public void shouldExceptionWhenTryGetMoreThanCapturedGroup() {
259-
String text = "abc";
260-
VerbalExpression regex = VerbalExpression.regex().find("b").capture().find("c").build();
261-
262-
regex.getText(text, 2);
263-
}
264-
265-
@Test
308+
@Test
266309
public void testEndCapture() {
267310
String text = "aaabcd";
268311
VerbalExpression regex = VerbalExpression.regex()
@@ -284,12 +327,6 @@ public void testMultiplyCapture() {
284327
assertThat("can't get first captured group", regex.getText(text, 1), equalTo("b"));
285328
assertThat("can't get second captured group", regex.getText(text, 2), equalTo("d"));
286329
}
287-
288-
@Test(expected = IllegalStateException.class)
289-
public void testEndCaptureOnEmptyRegex() {
290-
VerbalExpression.regex().endCapture().build();
291-
}
292-
293330
@Test
294331
public void testOrWithCapture() {
295332
VerbalExpression testRegex = VerbalExpression.regex()
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package ru.lanwen.verbalregex;
2+
3+
import org.junit.Test;
4+
5+
import java.util.regex.PatternSyntaxException;
6+
7+
import static org.hamcrest.CoreMatchers.equalTo;
8+
import static org.junit.Assert.assertThat;
9+
10+
/**
11+
* User: lanwen
12+
* Date: 11.05.14
13+
* Time: 3:37
14+
*/
15+
public class NegativeCasesTest {
16+
17+
@Test(expected = IllegalStateException.class)
18+
public void testEndCaptureOnEmptyRegex() {
19+
VerbalExpression.regex().endCapture().build();
20+
}
21+
22+
@Test(expected = IndexOutOfBoundsException.class)
23+
public void shouldExceptionWhenTryGetMoreThanCapturedGroup() {
24+
String text = "abc";
25+
VerbalExpression regex = VerbalExpression.regex().find("b").capture().find("c").build();
26+
27+
regex.getText(text, 2);
28+
}
29+
30+
@Test(expected = PatternSyntaxException.class)
31+
public void testRangeWithoutArgs() throws Exception {
32+
VerbalExpression.regex().startOfLine().range().build();
33+
}
34+
35+
@Test(expected = PatternSyntaxException.class)
36+
public void testRangeWithOneArg() throws Exception {
37+
VerbalExpression.regex().startOfLine().range("a").build();
38+
}
39+
40+
@Test
41+
public void rangeWithThreeArgsUsesOnlyFirstTwo() throws Exception {
42+
VerbalExpression regex = VerbalExpression.regex().startOfLine().range("a", "z", "A").build();
43+
44+
assertThat("Range with three args differs from expected", regex.toString(), equalTo("^[a-z]"));
45+
}
46+
}

src/test/java/ru/lanwen/verbalregex/RealWorldUnitTest.java

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55

66
import static org.hamcrest.CoreMatchers.equalTo;
7-
import static org.hamcrest.core.IsNot.not;
7+
import static org.hamcrest.CoreMatchers.is;
88
import static org.junit.Assert.assertThat;
99
import static org.junit.Assert.assertTrue;
1010

@@ -33,29 +33,21 @@ public void testUrl() {
3333
}
3434

3535
@Test
36-
public void staticFabricsRetunSameAsConstructorExpressions() {
37-
VerbalExpression regexViaFactory = VerbalExpression.regex().anything().build();
38-
VerbalExpression regexViaConstructor = new VerbalExpression.Builder().anything().build();
39-
40-
assertThat("Factory builder method produce not same as constructor regex",
41-
regexViaFactory.toString(), equalTo(regexViaConstructor.toString()));
42-
}
43-
44-
@Test
45-
public void clonedBuilderEqualsOriginal() {
46-
VerbalExpression.Builder builder = VerbalExpression.regex().anything().addModifier('i');
47-
VerbalExpression.Builder clonedBuilder = VerbalExpression.regex(builder);
36+
public void testTelephoneNumber() {
37+
VerbalExpression regex = VerbalExpression.regex()
38+
.startOfLine()
39+
.then("+")
40+
.capture().range("0", "9").count(3).maybe("-").maybe(" ").endCapture()
41+
.count(3)
42+
.endOfLine().build();
4843

49-
assertThat("Cloned builder changed after creating new one",
50-
builder.build().toString(), equalTo(clonedBuilder.build().toString()));
51-
}
44+
String phoneWithSpace = "+097 234 243";
45+
String phoneWithoutSpace = "+097234243";
46+
String phoneWithDash = "+097-234-243";
5247

53-
@Test
54-
public void clonedBuilderCantChangeOriginal() {
55-
VerbalExpression.Builder builder = VerbalExpression.regex().anything().addModifier('i');
56-
VerbalExpression.Builder clonedBuilder = VerbalExpression.regex(builder).endOfLine();
48+
assertThat(regex.testExact(phoneWithSpace), is(true));
49+
assertThat(regex.testExact(phoneWithoutSpace), is(true));
50+
assertThat(regex.testExact(phoneWithDash), is(true));
5751

58-
assertThat("Cloned builder changed after creating new one",
59-
builder.build().toString(), not(clonedBuilder.build().toString()));
6052
}
6153
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package ru.lanwen.verbalregex;
2+
3+
import org.junit.Test;
4+
5+
import static org.hamcrest.CoreMatchers.equalTo;
6+
import static org.hamcrest.core.IsNot.not;
7+
import static org.junit.Assert.assertThat;
8+
9+
/**
10+
* User: lanwen
11+
* Date: 11.05.14
12+
* Time: 3:30
13+
*/
14+
public class UsageLibTest {
15+
16+
17+
@Test
18+
public void staticFabricsRetunSameAsConstructorExpressions() {
19+
VerbalExpression regexViaFactory = VerbalExpression.regex().anything().build();
20+
VerbalExpression regexViaConstructor = new VerbalExpression.Builder().anything().build();
21+
22+
assertThat("Factory builder method produce not same as constructor regex",
23+
regexViaFactory.toString(), equalTo(regexViaConstructor.toString()));
24+
}
25+
26+
@Test
27+
public void clonedBuilderEqualsOriginal() {
28+
VerbalExpression.Builder builder = VerbalExpression.regex().anything().addModifier('i');
29+
VerbalExpression.Builder clonedBuilder = VerbalExpression.regex(builder);
30+
31+
assertThat("Cloned builder changed after creating new one",
32+
builder.build().toString(), equalTo(clonedBuilder.build().toString()));
33+
}
34+
35+
@Test
36+
public void clonedBuilderCantChangeOriginal() {
37+
VerbalExpression.Builder builder = VerbalExpression.regex().anything().addModifier('i');
38+
VerbalExpression.Builder clonedBuilder = VerbalExpression.regex(builder).endOfLine();
39+
40+
assertThat("Cloned builder changed after creating new one",
41+
builder.build().toString(), not(clonedBuilder.build().toString()));
42+
}
43+
44+
}

0 commit comments

Comments
 (0)