|
19 | 19 |
|
20 | 20 | package com.sk89q.worldedit.util; |
21 | 21 |
|
22 | | -import com.google.common.base.Preconditions; |
23 | | -import com.google.common.collect.Maps; |
24 | | -import org.junit.jupiter.api.Test; |
| 22 | +import net.jqwik.api.ForAll; |
| 23 | +import net.jqwik.api.Property; |
25 | 24 |
|
26 | | -import java.util.Arrays; |
27 | | -import java.util.EnumSet; |
28 | 25 | import java.util.Map; |
29 | | -import java.util.Set; |
30 | | -import java.util.function.Function; |
31 | | -import java.util.stream.Collectors; |
32 | | - |
33 | | -import static org.junit.jupiter.api.Assertions.assertEquals; |
34 | 26 |
|
35 | 27 | public class SideEffectSetTest { |
36 | | - private static void assertAppliesWithState(Map<SideEffect, SideEffect.State> expected, SideEffectSet set) { |
37 | | - Preconditions.checkArgument( |
38 | | - expected.keySet().containsAll(EnumSet.allOf(SideEffect.class)), |
39 | | - "Expected map must contain all side effects" |
40 | | - ); |
41 | | - |
42 | | - Set<SideEffect> appliedSet = expected.entrySet().stream() |
43 | | - .filter(e -> e.getValue() != SideEffect.State.OFF) |
44 | | - .map(Map.Entry::getKey) |
45 | | - .collect(Collectors.toSet()); |
46 | | - assertEquals(appliedSet, set.getSideEffectsToApply()); |
47 | | - assertEquals(!appliedSet.isEmpty(), set.doesApplyAny()); |
48 | | - for (SideEffect effect : SideEffect.values()) { |
49 | | - assertEquals( |
50 | | - appliedSet.contains(effect), set.shouldApply(effect), "Does not apply expected effect: " + effect |
51 | | - ); |
52 | | - assertEquals( |
53 | | - expected.get(effect), set.getState(effect), |
54 | | - "Does not have expected state for effect: " + effect |
55 | | - ); |
56 | | - } |
57 | | - } |
58 | | - |
59 | | - private static Map<SideEffect, SideEffect.State> initStateMap(Function<SideEffect, SideEffect.State> stateFunction) { |
60 | | - return Arrays.stream(SideEffect.values()).collect(Collectors.toMap(Function.identity(), stateFunction)); |
61 | | - } |
62 | | - |
63 | | - @Test |
64 | | - public void defaults() { |
65 | | - assertAppliesWithState( |
66 | | - initStateMap(SideEffect::getDefaultValue), |
67 | | - SideEffectSet.defaults() |
68 | | - ); |
| 28 | + @Property |
| 29 | + public boolean stateOrDefaultIsCorrect( |
| 30 | + @ForAll Map<SideEffect, SideEffect.State> stateMap, |
| 31 | + @ForAll SideEffect effectToTest |
| 32 | + ) { |
| 33 | + SideEffectSet set = new SideEffectSet(stateMap); |
| 34 | + return set.getState(effectToTest) == stateMap.getOrDefault(effectToTest, effectToTest.getDefaultValue()); |
69 | 35 | } |
70 | 36 |
|
71 | | - @Test |
72 | | - public void noneExposed() { |
73 | | - assertAppliesWithState( |
74 | | - initStateMap(effect -> { |
75 | | - if (effect.isExposed()) { |
76 | | - return SideEffect.State.OFF; |
77 | | - } else { |
78 | | - return effect.getDefaultValue(); |
79 | | - } |
80 | | - }), |
81 | | - SideEffectSet.none() |
82 | | - ); |
| 37 | + @Property |
| 38 | + public boolean shouldApplyUnlessOff( |
| 39 | + @ForAll Map<SideEffect, SideEffect.State> stateMap, |
| 40 | + @ForAll SideEffect effectToTest |
| 41 | + ) { |
| 42 | + SideEffectSet set = new SideEffectSet(stateMap); |
| 43 | + return set.shouldApply(effectToTest) |
| 44 | + == (stateMap.getOrDefault(effectToTest, effectToTest.getDefaultValue()) != SideEffect.State.OFF); |
83 | 45 | } |
84 | 46 |
|
85 | | - @Test |
86 | | - public void allOn() { |
87 | | - Map<SideEffect, SideEffect.State> expected = initStateMap(effect -> SideEffect.State.ON); |
88 | | - assertAppliesWithState( |
89 | | - expected, |
90 | | - new SideEffectSet(expected) |
91 | | - ); |
| 47 | + @Property |
| 48 | + public boolean withChangesState( |
| 49 | + @ForAll Map<SideEffect, SideEffect.State> stateMap, |
| 50 | + @ForAll SideEffect effectToTest, |
| 51 | + @ForAll SideEffect.State stateToSet |
| 52 | + ) { |
| 53 | + SideEffectSet set = new SideEffectSet(stateMap).with(effectToTest, stateToSet); |
| 54 | + return set.getState(effectToTest) == stateToSet; |
92 | 55 | } |
93 | 56 |
|
94 | | - @Test |
95 | | - public void allDelayed() { |
96 | | - Map<SideEffect, SideEffect.State> expected = initStateMap(effect -> SideEffect.State.DELAYED); |
97 | | - assertAppliesWithState( |
98 | | - expected, |
99 | | - new SideEffectSet(expected) |
100 | | - ); |
101 | | - } |
102 | | - |
103 | | - @Test |
104 | | - public void allOff() { |
105 | | - Map<SideEffect, SideEffect.State> expected = initStateMap(effect -> SideEffect.State.OFF); |
106 | | - assertAppliesWithState( |
107 | | - expected, |
108 | | - new SideEffectSet(expected) |
109 | | - ); |
110 | | - } |
111 | | - |
112 | | - @Test |
113 | | - public void with() { |
114 | | - Map<SideEffect, SideEffect.State> expected = initStateMap(SideEffect::getDefaultValue); |
115 | | - SideEffectSet set = SideEffectSet.defaults(); |
116 | | - |
| 57 | + @Property |
| 58 | + public boolean anyShouldApplyEqualsDoesApplyAny(@ForAll Map<SideEffect, SideEffect.State> stateMap) { |
| 59 | + SideEffectSet set = new SideEffectSet(stateMap); |
| 60 | + boolean anyShouldApply = false; |
117 | 61 | for (SideEffect effect : SideEffect.values()) { |
118 | | - for (SideEffect.State state : SideEffect.State.values()) { |
119 | | - expected = Maps.transformEntries(expected, (e, s) -> e == effect ? state : s); |
120 | | - set = set.with(effect, state); |
121 | | - assertAppliesWithState(expected, set); |
| 62 | + if (set.shouldApply(effect)) { |
| 63 | + anyShouldApply = true; |
| 64 | + break; |
122 | 65 | } |
123 | 66 | } |
| 67 | + return anyShouldApply == set.doesApplyAny(); |
| 68 | + } |
| 69 | + |
| 70 | + @Property |
| 71 | + public boolean shouldApplyEqualsApplySetContains( |
| 72 | + @ForAll Map<SideEffect, SideEffect.State> stateMap, |
| 73 | + @ForAll SideEffect effectToTest |
| 74 | + ) { |
| 75 | + SideEffectSet set = new SideEffectSet(stateMap); |
| 76 | + return set.shouldApply(effectToTest) == set.getSideEffectsToApply().contains(effectToTest); |
124 | 77 | } |
125 | 78 | } |
0 commit comments