Skip to content

Commit 8ee6f28

Browse files
authored
Add RecurrenceSet::isFinite method to deprecate isInfinite, closes #134 (#135)
1 parent 05920e7 commit 8ee6f28

File tree

22 files changed

+184
-41
lines changed

22 files changed

+184
-41
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ dependencies {
7878
api libs.jems2
7979
testImplementation project("lib-recur-hamcrest")
8080
testImplementation project("lib-recur-confidence")
81-
testImplementation 'org.dmfs:jems2-testing:2.22.0'
81+
testImplementation libs.jems2.testing
8282
testImplementation libs.jems2.confidence
8383
testImplementation 'org.saynotobugs:confidence-core:0.42.0'
8484
}

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[versions]
22
eclipse-jdt = "2.2.600"
33
hamcrest = "2.2"
4-
jems2 = "2.22.0"
4+
jems2 = "2.23.1"
55
junit = "5.8.2"
66
junit-testkit = "1.9.2"
77
srcless = "0.3.0"

lib-recur-confidence/src/main/java/org/dmfs/rfc5545/confidence/quality/EmptyRecurrenceSet.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public EmptyRecurrenceSet()
3232
{
3333
super(new AllOf<>(
3434
new Is<>(new EmptyIterable()),
35+
new Is<>(new Finite()),
3536
new Is<>(new Not<>(new Infinite()))));
3637
}
3738
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright 2024 Marten Gajda <marten@dmfs.org>
3+
*
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.dmfs.rfc5545.confidence.quality;
19+
20+
import org.dmfs.rfc5545.RecurrenceSet;
21+
import org.dmfs.srcless.annotations.staticfactory.StaticFactories;
22+
import org.saynotobugs.confidence.description.Text;
23+
import org.saynotobugs.confidence.quality.composite.AllOf;
24+
import org.saynotobugs.confidence.quality.composite.Not;
25+
import org.saynotobugs.confidence.quality.composite.QualityComposition;
26+
import org.saynotobugs.confidence.quality.object.Satisfies;
27+
28+
@StaticFactories(value = "Recur", packageName = "org.dmfs.rfc5545.confidence")
29+
public final class Finite extends QualityComposition<RecurrenceSet>
30+
{
31+
public Finite()
32+
{
33+
super(new AllOf<>(
34+
new Not<>(new Satisfies<>(RecurrenceSet::isInfinite, new Text("infinite"))),
35+
new Satisfies<>(RecurrenceSet::isFinite, new Text("finite"))));
36+
}
37+
}

lib-recur-confidence/src/main/java/org/dmfs/rfc5545/confidence/quality/Infinite.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import org.dmfs.rfc5545.RecurrenceSet;
2121
import org.dmfs.srcless.annotations.staticfactory.StaticFactories;
2222
import org.saynotobugs.confidence.description.Text;
23+
import org.saynotobugs.confidence.quality.composite.AllOf;
24+
import org.saynotobugs.confidence.quality.composite.Not;
2325
import org.saynotobugs.confidence.quality.composite.QualityComposition;
2426
import org.saynotobugs.confidence.quality.object.Satisfies;
2527

@@ -28,6 +30,8 @@ public final class Infinite extends QualityComposition<RecurrenceSet>
2830
{
2931
public Infinite()
3032
{
31-
super(new Satisfies<>(RecurrenceSet::isInfinite, new Text("infinite")));
33+
super(new AllOf<>(
34+
new Not<>(new Satisfies<>(RecurrenceSet::isFinite, new Text("finite"))),
35+
new Satisfies<>(RecurrenceSet::isInfinite, new Text("infinite"))));
3236
}
3337
}

lib-recur-confidence/src/test/java/org/dmfs/rfc5545/confidence/quality/EmptyRecurrenceSetTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,25 @@ void test()
3838
allOf(
3939
org.saynotobugs.confidence.test.quality.Test.<RecurrenceSet>passes(mock(RecurrenceSet.class,
4040
with(RecurrenceSet::isInfinite, returning(false)),
41+
with(RecurrenceSet::isFinite, returning(true)),
4142
with(RecurrenceSet::iterator, returning(new EmptyIterator())))),
4243

4344
fails(mock(RecurrenceSet.class,
4445
with(RecurrenceSet::isInfinite, returning(true)),
46+
with(RecurrenceSet::isFinite, returning(false)),
4547
with(RecurrenceSet::iterator, returning(new EmptyIterator())))),
4648

4749
fails(mock(RecurrenceSet.class,
4850
with(RecurrenceSet::isInfinite, returning(false)),
51+
with(RecurrenceSet::isFinite, returning(true)),
4952
with(RecurrenceSet::iterator, returning(
5053
new FastForwardable(
5154
DateTime.parse("20240101"),
5255
new Seq<>(DateTime.parse("20240102"), DateTime.parse("20240103"))))))),
5356

5457
fails(mock(RecurrenceSet.class,
5558
with(RecurrenceSet::isInfinite, returning(true)),
59+
with(RecurrenceSet::isFinite, returning(false)),
5660
with(RecurrenceSet::iterator, returning(
5761
new FastForwardable(
5862
DateTime.parse("20240101"),
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* Copyright 2024 Marten Gajda <marten@dmfs.org>
3+
*
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.dmfs.rfc5545.confidence.quality;
19+
20+
import org.dmfs.rfc5545.InstanceIterator;
21+
import org.dmfs.rfc5545.RecurrenceSet;
22+
import org.junit.jupiter.api.Test;
23+
24+
import static org.dmfs.jems2.mockito.Mock.*;
25+
import static org.saynotobugs.confidence.Assertion.assertThat;
26+
import static org.saynotobugs.confidence.quality.Core.allOf;
27+
import static org.saynotobugs.confidence.test.quality.Test.fails;
28+
29+
class FiniteTest
30+
{
31+
@Test
32+
void test()
33+
{
34+
assertThat(new Finite(),
35+
allOf(
36+
org.saynotobugs.confidence.test.quality.Test.<RecurrenceSet>passes(mock(RecurrenceSet.class,
37+
with(RecurrenceSet::isInfinite, returning(false)),
38+
with(RecurrenceSet::isFinite, returning(true)),
39+
with(RecurrenceSet::iterator, returning(mock(InstanceIterator.class))))),
40+
41+
fails(mock(RecurrenceSet.class,
42+
with(RecurrenceSet::isInfinite, returning(true)),
43+
with(RecurrenceSet::isFinite, returning(false)),
44+
with(RecurrenceSet::iterator, returning(mock(InstanceIterator.class)))))));
45+
}
46+
47+
}

lib-recur-confidence/src/test/java/org/dmfs/rfc5545/confidence/quality/InfiniteTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ void test()
3535
allOf(
3636
org.saynotobugs.confidence.test.quality.Test.<RecurrenceSet>passes(mock(RecurrenceSet.class,
3737
with(RecurrenceSet::isInfinite, returning(true)),
38+
with(RecurrenceSet::isFinite, returning(false)),
3839
with(RecurrenceSet::iterator, returning(mock(InstanceIterator.class))))),
3940

4041
fails(mock(RecurrenceSet.class,
4142
with(RecurrenceSet::isInfinite, returning(false)),
43+
with(RecurrenceSet::isFinite, returning(true)),
4244
with(RecurrenceSet::iterator, returning(mock(InstanceIterator.class)))))));
4345
}
4446

src/main/java/org/dmfs/rfc5545/RecurrenceSet.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
package org.dmfs.rfc5545;
1919

2020

21-
import org.dmfs.jems2.Optional;
22-
2321
/**
2422
* A set of instances.
2523
*/
@@ -32,6 +30,17 @@ public interface RecurrenceSet extends Iterable<DateTime>
3230

3331
/**
3432
* Returns whether this {@link RecurrenceSet} is infinite or not.
33+
*
34+
* @deprecated in favour of {@link #isFinite()}
3535
*/
36+
@Deprecated(forRemoval = true)
3637
boolean isInfinite();
38+
39+
/**
40+
* Returns whether this {@link RecurrenceSet} is finite.
41+
*/
42+
default boolean isFinite()
43+
{
44+
return !isInfinite();
45+
}
3746
}

src/main/java/org/dmfs/rfc5545/optional/LastInstance.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import org.dmfs.jems2.Optional;
2121
import org.dmfs.jems2.optional.DelegatingOptional;
22-
import org.dmfs.jems2.optional.Restrained;
22+
import org.dmfs.jems2.optional.If;
2323
import org.dmfs.rfc5545.DateTime;
2424
import org.dmfs.rfc5545.RecurrenceSet;
2525

@@ -31,6 +31,6 @@ public final class LastInstance extends DelegatingOptional<DateTime>
3131
{
3232
public LastInstance(RecurrenceSet recurrenceSet)
3333
{
34-
super(new Restrained<>(() -> !recurrenceSet.isInfinite(), new Last<>(recurrenceSet)));
34+
super(new If<>(recurrenceSet::isFinite, new Last<>(recurrenceSet)));
3535
}
3636
}

0 commit comments

Comments
 (0)