Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c9485ac

Browse files
test enums with interface
1 parent bfeda0b commit c9485ac

File tree

5 files changed

+202
-1
lines changed

5 files changed

+202
-1
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package enums;
2+
3+
import java.util.ArrayList;
4+
import java.util.EnumSet;
5+
import java.util.List;
6+
7+
/**
8+
*
9+
*/
10+
public enum CleanUpStage implements Stage<CleanUpStage> {
11+
12+
SETUP_PARAMETERS, STOP_PROCESS, REMOVE_FILES;
13+
14+
private static List<CleanUpStage> STAGES = new ArrayList<>(EnumSet.allOf(CleanUpStage.class));
15+
16+
@Override
17+
public CleanUpStage getFirstStage() {
18+
return STAGES.get(0);
19+
}
20+
21+
@Override
22+
public CleanUpStage getLastStage() {
23+
return STAGES.get(STAGES.size() - 1);
24+
}
25+
26+
@Override
27+
public List<CleanUpStage> getSortedStage() {
28+
return new ArrayList<>(STAGES);
29+
}
30+
31+
@Override
32+
public CleanUpStage upgradeTo() {
33+
if (getLastStage() == this) {
34+
return this;
35+
}
36+
37+
return getStage(STAGES, 1);
38+
}
39+
40+
@Override
41+
public CleanUpStage downgrade() {
42+
if (getFirstStage() == this) {
43+
return this;
44+
}
45+
46+
return getStage(STAGES, -1);
47+
}
48+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package enums;
2+
3+
import java.util.ArrayList;
4+
import java.util.EnumSet;
5+
import java.util.List;
6+
7+
/**
8+
*
9+
*/
10+
public enum InstallStage implements Stage<InstallStage> {
11+
12+
SETUP, INSTALL, JOIN;
13+
14+
private static List<InstallStage> STAGES = new ArrayList<>(EnumSet.allOf(InstallStage.class));
15+
16+
public static List<InstallStage> getStages() {
17+
return new ArrayList<>(STAGES);
18+
}
19+
20+
@Override
21+
public InstallStage getFirstStage() {
22+
return STAGES.get(0);
23+
}
24+
25+
@Override
26+
public InstallStage getLastStage() {
27+
return STAGES.get(STAGES.size() - 1);
28+
}
29+
30+
@Override
31+
public List<InstallStage> getSortedStage() {
32+
return getStages();
33+
}
34+
35+
@Override
36+
public InstallStage upgradeTo() {
37+
if (getLastStage() == this) {
38+
return this;
39+
}
40+
41+
return getStage(STAGES, 1);
42+
}
43+
44+
@Override
45+
public InstallStage downgrade() {
46+
if (getFirstStage() == this) {
47+
return this;
48+
}
49+
50+
return getStage(STAGES, -1);
51+
}
52+
}

‎javademo/src/main/java/enums/Stage.java

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package enums;
2+
3+
import java.util.List;
4+
5+
/**
6+
*
7+
*/
8+
public interface Stage<T extends Enum> {
9+
10+
/**
11+
* Check this enum is whether greater than other or not
12+
*/
13+
default boolean isGraterThan(T other) {
14+
return ((Enum) this).compareTo(other) > 0;
15+
}
16+
17+
/**
18+
* Check this enum is whether less than other or not
19+
*/
20+
default boolean isLessThan(T other) {
21+
return ((Enum) this).compareTo(other) < 0;
22+
}
23+
24+
default T getStage(List<T> stages, int delta) {
25+
if (stages == null || stages.isEmpty()) {
26+
throw new IllegalArgumentException("stages must be not empty");
27+
}
28+
29+
int targetIdx = stages.indexOf(this) + delta;
30+
31+
if (targetIdx < 0 || targetIdx >= stages.size()) {
32+
throw new IllegalArgumentException("Invalid index " + targetIdx + ". it is out of bounds stages");
33+
}
34+
35+
return stages.get(targetIdx);
36+
}
37+
38+
/**
39+
* Getting first stage
40+
*/
41+
T getFirstStage();
42+
43+
/**
44+
* Getting last stage
45+
*/
46+
T getLastStage();
47+
48+
/**
49+
* Getting sorted stage enums (asc)
50+
*/
51+
List<T> getSortedStage();
52+
53+
/**
54+
* Getting next stage
55+
*/
56+
T upgradeTo();
57+
58+
/**
59+
* Getting prev stage
60+
*/
61+
T downgrade();
62+
}

‎javademo/src/test/java/enums/EnumCompareTests.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ public void compareTo() {
1111
assertTrue(TestEnums.COMPLETE.compareTo(TestEnums.STARTED) < 0);
1212
}
1313

14-
1514
public enum TestEnums {
1615
COMPLETE, STARTING, STARTED, STOPPING, STOPPED;
1716
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package enums;
2+
3+
import static org.junit.Assert.assertTrue;
4+
5+
import java.util.List;
6+
import java.util.stream.IntStream;
7+
import org.junit.Test;
8+
9+
/**
10+
*
11+
*/
12+
public class StageTests {
13+
14+
@Test
15+
public void testStageEnums() {
16+
List<InstallStage> stages = InstallStage.getStages();
17+
18+
InstallStage prevStage = null;
19+
int remain = stages.size();
20+
21+
for (int i = 0; i < stages.size(); i++) {
22+
InstallStage currentStage = stages.get(i);
23+
24+
if (i == 0) {
25+
assertTrue(currentStage == currentStage.getFirstStage());
26+
assertTrue(currentStage == currentStage.downgrade());
27+
} else if (i == stages.size() - 1) {
28+
assertTrue(currentStage == currentStage.getLastStage());
29+
assertTrue(currentStage == currentStage.upgradeTo());
30+
} else {
31+
assertTrue(currentStage.isGraterThan(prevStage));
32+
assertTrue(currentStage.downgrade() == prevStage);
33+
}
34+
prevStage = currentStage;
35+
remain--;
36+
}
37+
38+
assertTrue(remain == 0);
39+
}
40+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /