Skip to content

Commit 12a9679

Browse files
committed
Improve FlagSet tests
1 parent 577062f commit 12a9679

File tree

14 files changed

+324
-363
lines changed

14 files changed

+324
-363
lines changed

src/main/java/org/lmdbjava/AbstractFlagSet.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ protected Builder(final Class<E> type,
278278
* @param flags The flags to set in the builder.
279279
* @return this builder instance.
280280
*/
281-
public Builder<E, S> withFlags(final Collection<E> flags) {
281+
public Builder<E, S> setFlags(final Collection<E> flags) {
282282
clear();
283283
if (flags != null) {
284284
for (E flag : flags) {
@@ -295,7 +295,7 @@ public Builder<E, S> withFlags(final Collection<E> flags) {
295295
* @return this builder instance.
296296
*/
297297
@SafeVarargs
298-
public final Builder<E, S> withFlags(final E... flags) {
298+
public final Builder<E, S> setFlags(final E... flags) {
299299
clear();
300300
if (flags != null) {
301301
for (E flag : flags) {
@@ -311,25 +311,25 @@ public final Builder<E, S> withFlags(final E... flags) {
311311
}
312312

313313
/**
314-
* Sets a single flag in the builder.
314+
* Adds a single flag in the builder.
315315
*
316316
* @param flag The flag to set in the builder.
317317
* @return this builder instance.
318318
*/
319-
public Builder<E, S> setFlag(final E flag) {
319+
public Builder<E, S> addFlag(final E flag) {
320320
if (flag != null) {
321321
enumSet.add(flag);
322322
}
323323
return this;
324324
}
325325

326326
/**
327-
* Sets multiple flag in the builder.
327+
* Adds multiple flag in the builder.
328328
*
329329
* @param flags The flags to set in the builder.
330330
* @return this builder instance.
331331
*/
332-
public Builder<E, S> setFlags(final Collection<E> flags) {
332+
public Builder<E, S> addFlags(final Collection<E> flags) {
333333
if (flags != null) {
334334
enumSet.addAll(flags);
335335
}

src/main/java/org/lmdbjava/CopyFlagSet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ static CopyFlagSet of(final CopyFlags dbiFlag) {
3434

3535
static CopyFlagSet of(final CopyFlags... CopyFlags) {
3636
return builder()
37-
.withFlags(CopyFlags)
37+
.setFlags(CopyFlags)
3838
.build();
3939
}
4040

4141
static CopyFlagSet of(final Collection<CopyFlags> CopyFlags) {
4242
return builder()
43-
.withFlags(CopyFlags)
43+
.setFlags(CopyFlags)
4444
.build();
4545
}
4646

src/main/java/org/lmdbjava/DbiBuilder.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ public DbiBuilderStage3<T> setDbiFlags(final DbiFlags... dbiFlags) {
300300
if (dbiFlags != null) {
301301
Arrays.stream(dbiFlags)
302302
.filter(Objects::nonNull)
303-
.forEach(this.flagSetBuilder::setFlag);
303+
.forEach(this.flagSetBuilder::addFlag);
304304
}
305305
return this;
306306
}
@@ -322,7 +322,7 @@ public DbiBuilderStage3<T> setDbiFlags(final DbiFlags... dbiFlags) {
322322
public DbiBuilderStage3<T> setDbiFlags(final DbiFlagSet dbiFlagSet) {
323323
flagSetBuilder.clear();
324324
if (dbiFlagSet != null) {
325-
this.flagSetBuilder.withFlags(dbiFlagSet.getFlags());
325+
this.flagSetBuilder.setFlags(dbiFlagSet.getFlags());
326326
}
327327
return this;
328328
}
@@ -337,7 +337,7 @@ public DbiBuilderStage3<T> setDbiFlags(final DbiFlagSet dbiFlagSet) {
337337
* @return this builder instance.
338338
*/
339339
public DbiBuilderStage3<T> addDbiFlag(final DbiFlags dbiFlag) {
340-
this.flagSetBuilder.setFlag(dbiFlag);
340+
this.flagSetBuilder.addFlag(dbiFlag);
341341
return this;
342342
}
343343

@@ -352,7 +352,7 @@ public DbiBuilderStage3<T> addDbiFlag(final DbiFlags dbiFlag) {
352352
*/
353353
public DbiBuilderStage3<T> addDbiFlags(final DbiFlagSet dbiFlagSet) {
354354
if (dbiFlagSet != null) {
355-
flagSetBuilder.setFlags(dbiFlagSet.getFlags());
355+
flagSetBuilder.addFlags(dbiFlagSet.getFlags());
356356
}
357357
return this;
358358
}

src/main/java/org/lmdbjava/DbiFlagSet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ static DbiFlagSet of(final DbiFlags dbiFlag) {
4040

4141
static DbiFlagSet of(final DbiFlags... DbiFlags) {
4242
return builder()
43-
.withFlags(DbiFlags)
43+
.setFlags(DbiFlags)
4444
.build();
4545
}
4646

4747
static DbiFlagSet of(final Collection<DbiFlags> DbiFlags) {
4848
return builder()
49-
.withFlags(DbiFlags)
49+
.setFlags(DbiFlags)
5050
.build();
5151
}
5252

src/main/java/org/lmdbjava/Env.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -885,7 +885,7 @@ public Builder<T> setEnvFlags(final EnvFlags... envFlags) {
885885
if (envFlags != null) {
886886
Arrays.stream(envFlags)
887887
.filter(Objects::nonNull)
888-
.forEach(this.flagSetBuilder::setFlag);
888+
.forEach(this.flagSetBuilder::addFlag);
889889
}
890890
return this;
891891
}
@@ -901,7 +901,7 @@ public Builder<T> setEnvFlags(final EnvFlags... envFlags) {
901901
public Builder<T> setEnvFlags(final EnvFlagSet envFlagSet) {
902902
flagSetBuilder.clear();
903903
if (envFlagSet != null) {
904-
this.flagSetBuilder.withFlags(envFlagSet.getFlags());
904+
this.flagSetBuilder.setFlags(envFlagSet.getFlags());
905905
}
906906
return this;
907907
}
@@ -914,7 +914,7 @@ public Builder<T> setEnvFlags(final EnvFlagSet envFlagSet) {
914914
* @return this builder instance.
915915
*/
916916
public Builder<T> addEnvFlag(final EnvFlags dbiFlag) {
917-
this.flagSetBuilder.setFlag(dbiFlag);
917+
this.flagSetBuilder.addFlag(dbiFlag);
918918
return this;
919919
}
920920

@@ -927,7 +927,7 @@ public Builder<T> addEnvFlag(final EnvFlags dbiFlag) {
927927
*/
928928
public Builder<T> addEnvFlags(final EnvFlagSet dbiFlagSet) {
929929
if (dbiFlagSet != null) {
930-
flagSetBuilder.setFlags(dbiFlagSet.getFlags());
930+
flagSetBuilder.addFlags(dbiFlagSet.getFlags());
931931
}
932932
return this;
933933
}

src/main/java/org/lmdbjava/EnvFlagSet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ static EnvFlagSet of(final EnvFlags envFlag) {
3434

3535
static EnvFlagSet of(final EnvFlags... EnvFlags) {
3636
return builder()
37-
.withFlags(EnvFlags)
37+
.setFlags(EnvFlags)
3838
.build();
3939
}
4040

4141
static EnvFlagSet of(final Collection<EnvFlags> EnvFlags) {
4242
return builder()
43-
.withFlags(EnvFlags)
43+
.setFlags(EnvFlags)
4444
.build();
4545
}
4646

src/main/java/org/lmdbjava/PutFlagSet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ static PutFlagSet of(final PutFlags putFlag) {
3434

3535
static PutFlagSet of(final PutFlags... putFlags) {
3636
return builder()
37-
.withFlags(putFlags)
37+
.setFlags(putFlags)
3838
.build();
3939
}
4040

4141
static PutFlagSet of(final Collection<PutFlags> putFlags) {
4242
return builder()
43-
.withFlags(putFlags)
43+
.setFlags(putFlags)
4444
.build();
4545
}
4646

src/main/java/org/lmdbjava/TxnFlagSet.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.lmdbjava;
1717

18+
import java.util.Collection;
1819
import java.util.EnumSet;
1920
import java.util.Objects;
2021

@@ -26,14 +27,20 @@ static TxnFlagSet empty() {
2627
return TxnFlagSetImpl.EMPTY;
2728
}
2829

29-
static TxnFlagSet of(final TxnFlags putFlag) {
30-
Objects.requireNonNull(putFlag);
31-
return new SingleTxnFlagSet(putFlag);
30+
static TxnFlagSet of(final TxnFlags putflag) {
31+
Objects.requireNonNull(putflag);
32+
return new SingleTxnFlagSet(putflag);
3233
}
3334

3435
static TxnFlagSet of(final TxnFlags... TxnFlags) {
3536
return builder()
36-
.withFlags(TxnFlags)
37+
.setFlags(TxnFlags)
38+
.build();
39+
}
40+
41+
static TxnFlagSet of(final Collection<TxnFlags> txnFlags) {
42+
return builder()
43+
.setFlags(txnFlags)
3744
.build();
3845
}
3946

Lines changed: 137 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,141 @@
1-
/*
2-
* Copyright © 2016-2025 The LmdbJava Open Source Project
3-
*
4-
* Licensed under the Apache License, Version 2.0 (the "License");
5-
* you may not use this file except in compliance with the License.
6-
* You may obtain a copy of the License at
7-
*
8-
* http://www.apache.org/licenses/LICENSE-2.0
9-
*
10-
* Unless required by applicable law or agreed to in writing, software
11-
* distributed under the License is distributed on an "AS IS" BASIS,
12-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13-
* See the License for the specific language governing permissions and
14-
* limitations under the License.
15-
*/
161
package org.lmdbjava;
172

18-
public abstract class AbstractFlagSetTest {
3+
import static org.assertj.core.api.Assertions.assertThat;
194

5+
import java.lang.reflect.Array;
6+
import java.util.ArrayList;
7+
import java.util.Collection;
8+
import java.util.HashSet;
9+
import java.util.List;
10+
import java.util.Set;
11+
import org.junit.jupiter.api.Test;
12+
13+
public abstract class AbstractFlagSetTest<T extends Enum<T> & MaskedFlag & FlagSet<T>, F extends FlagSet<T>> {
14+
15+
abstract List<T> getAllFlags();
16+
17+
abstract F getEmptyFlagSet();
18+
19+
abstract AbstractFlagSet.Builder<T, F> getBuilder();
20+
21+
abstract F getFlagSet(final Collection<T> flags);
22+
23+
abstract F getFlagSet(final T[] flags);
24+
25+
abstract F getFlagSet(final T flag);
26+
27+
abstract Class<T> getFlagType();
28+
29+
T getFirst() {
30+
return getAllFlags().get(0);
31+
}
32+
33+
int getFlagCount() {
34+
return getAllFlags().size();
35+
}
36+
37+
@Test
38+
void testEmpty() {
39+
final F emptyFlagSet = getEmptyFlagSet();
40+
assertThat(emptyFlagSet.getMask())
41+
.isEqualTo(0);
42+
assertThat(emptyFlagSet.getFlags())
43+
.isEmpty();
44+
assertThat(emptyFlagSet.isEmpty())
45+
.isTrue();
46+
assertThat(emptyFlagSet.size())
47+
.isEqualTo(0);
48+
assertThat(emptyFlagSet.isSet(getFirst()))
49+
.isFalse();
50+
assertThat(getBuilder().build().getFlags())
51+
.isEqualTo(emptyFlagSet.getFlags());
52+
}
53+
54+
@Test
55+
void testSingleFlagSet() {
56+
final List<T> allFlags = getAllFlags();
57+
for (T flag : allFlags) {
58+
final F flagSet = getBuilder()
59+
.addFlag(flag)
60+
.build();
61+
assertThat(flagSet.getMask())
62+
.isEqualTo(flag.getMask());
63+
assertThat(flagSet.getMask())
64+
.isEqualTo(MaskedFlag.mask(flag));
65+
assertThat(flagSet.getFlags())
66+
.containsExactly(flag);
67+
assertThat(flagSet.size())
68+
.isEqualTo(1);
69+
assertThat(FlagSet.equals(flagSet, flag))
70+
.isTrue();
71+
assertThat(FlagSet.equals(flagSet, getFlagSet(flag)))
72+
.isTrue();
73+
assertThat(FlagSet.equals(flagSet, getFlagSet(flagSet.getFlags())))
74+
.isTrue();
75+
assertThat(flagSet.areAnySet(flag))
76+
.isTrue();
77+
assertThat(flagSet.isSet(getFirst()))
78+
.isEqualTo(getFirst() == flag);
79+
if (getFirst() == flag) {
80+
assertThat(flagSet.getMask())
81+
.isEqualTo(MaskedFlag.mask(getFirst()));
82+
} else {
83+
assertThat(flagSet.getMask())
84+
.isNotEqualTo(MaskedFlag.mask(getFirst()));
85+
}
86+
assertThat(flagSet.toString())
87+
.isNotNull();
88+
assertThat(flag.name())
89+
.isNotNull();
90+
}
91+
}
92+
93+
@Test
94+
void testAllFlags() {
95+
final List<T> allFlags = getAllFlags();
96+
final List<T> flags = new ArrayList<>(allFlags.size());
97+
final Set<Integer> masks = new HashSet<>();
98+
final T firstFlag = getFirst();
99+
for (T flag : allFlags) {
100+
flags.add(flag);
101+
final F flagSet = getBuilder()
102+
.setFlags(flags)
103+
.build();
104+
final int flagSetMask = flagSet.getMask();
105+
106+
assertThat(masks)
107+
.doesNotContain(flagSetMask);
108+
masks.add(flagSetMask);
109+
assertThat(flagSetMask)
110+
.isEqualTo(MaskedFlag.mask(flags));
111+
final T[] flagsArr = flags.stream().toArray(this::toArray);
112+
assertThat(flagSetMask)
113+
.isEqualTo(MaskedFlag.mask(flagsArr));
114+
assertThat(flagSet.getFlags())
115+
.containsExactlyElementsOf(flags);
116+
assertThat(flagSet)
117+
.isNotEmpty();
118+
assertThat(FlagSet.equals(flagSet, getBuilder().setFlags(flagsArr).build()))
119+
.isTrue();
120+
assertThat(FlagSet.equals(flagSet, getFlagSet(flags)))
121+
.isTrue();
122+
assertThat(FlagSet.equals(flagSet, getFlagSet(flagsArr)))
123+
.isTrue();
124+
assertThat(flagSet.size())
125+
.isEqualTo(flags.size());
126+
assertThat(flagSet.isSet(getFirst()))
127+
.isEqualTo(true);
128+
129+
final int maskWith = flagSet.getMaskWith(firstFlag);
130+
final List<T> combinedList = new ArrayList<>(flags);
131+
combinedList.add(firstFlag);
132+
assertThat(maskWith)
133+
.isEqualTo(MaskedFlag.mask(combinedList));
134+
}
135+
}
136+
137+
private T[] toArray(final int cnt) {
138+
//noinspection unchecked
139+
return (T[]) Array.newInstance(getFlagType(), cnt);
140+
}
20141
}

0 commit comments

Comments
 (0)