diff --git a/src/main/java/ConsoleMain.java b/src/main/java/ConsoleMain.java new file mode 100644 index 0000000000..ba8eb94ef2 --- /dev/null +++ b/src/main/java/ConsoleMain.java @@ -0,0 +1,21 @@ +import game.ladder.domain.Height; +import game.ladder.domain.Ladder; +import game.ladder.domain.LinesGenerator; +import game.ladder.domain.Participants; +import game.ladder.view.InputView; +import game.ladder.view.OutputView; + +public class ConsoleMain { + + public static void main(String[] args) { + Participants participants = InputView.readParticipant(); + + Height height = InputView.readHeight(); + + LinesGenerator linesGenerator = new LinesGenerator(height); + Ladder ladder = new Ladder(linesGenerator, participants); + + OutputView.printLadder(ladder); + } + +} diff --git a/src/main/java/empty.txt b/src/main/java/empty.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/main/java/game/ladder/domain/Block.java b/src/main/java/game/ladder/domain/Block.java new file mode 100644 index 0000000000..1b7214e12a --- /dev/null +++ b/src/main/java/game/ladder/domain/Block.java @@ -0,0 +1,55 @@ +package game.ladder.domain; + +import java.util.Random; + +public class Block { + + public static final Block EMPTY_BLOCK = new Block(BlockType.EMPTY); + public static final Block FILLED_BLOCK = new Block(BlockType.FILLED); + + public static final int WIDTH = 5; + + private static final Random RANDOM = new Random(); + + private final BlockType blockType; + + private Block(BlockType blockType) { + this.blockType = blockType; + } + + public static Block nextBlock(Block before) { + if (before == FILLED_BLOCK) { + return EMPTY_BLOCK; + } + + if (RANDOM.nextBoolean()) { + return FILLED_BLOCK; + } + + return EMPTY_BLOCK; + } + + public BlockType getType() { + return this.blockType; + } + + @Override + public String toString() { + return blockType.makeShapes(WIDTH); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Block block = (Block) o; + + return blockType == block.blockType; + } + + @Override + public int hashCode() { + return blockType.hashCode(); + } +} diff --git a/src/main/java/game/ladder/domain/BlockType.java b/src/main/java/game/ladder/domain/BlockType.java new file mode 100644 index 0000000000..6ce6d58b5c --- /dev/null +++ b/src/main/java/game/ladder/domain/BlockType.java @@ -0,0 +1,25 @@ +package game.ladder.domain; + +public enum BlockType { + + EMPTY(" "), FILLED("-"); + + private String shape; + + BlockType(String shape) { + this.shape = shape; + } + + public String getShape() { + return this.shape; + } + + public String makeShapes(int width) { + StringBuilder sb = new StringBuilder(width); + for (int i = 0; i < width; i++) { + sb.append(this.shape); + } + return sb.toString(); + } + +} diff --git a/src/main/java/game/ladder/domain/Height.java b/src/main/java/game/ladder/domain/Height.java new file mode 100644 index 0000000000..f31d20b235 --- /dev/null +++ b/src/main/java/game/ladder/domain/Height.java @@ -0,0 +1,32 @@ +package game.ladder.domain; + +import spark.utils.Assert; + +public class Height { + public static final int MIN = 0; + private final int value; + + public Height(int value) { + Assert.isTrue(value > MIN, "높이는 0보다 큰 숫자여야 합니다."); + this.value = value; + } + + public int getValue() { + return value; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Height height = (Height) o; + + return value == height.value; + } + + @Override + public int hashCode() { + return value; + } +} diff --git a/src/main/java/game/ladder/domain/Ladder.java b/src/main/java/game/ladder/domain/Ladder.java new file mode 100644 index 0000000000..a1b60f2866 --- /dev/null +++ b/src/main/java/game/ladder/domain/Ladder.java @@ -0,0 +1,22 @@ +package game.ladder.domain; + +public class Ladder { + + private final Participants participants; + private final Lines lines; + + public Ladder(LinesGenerator generator, Participants participants) { + this.participants = participants; + this.lines = generator.generate(participants.size()); + } + + public String makeStringLadder() { + StringBuilder sb = new StringBuilder(); + sb.append(participants.getAllFormattedNames()).append(System.lineSeparator()); + sb.append(lines.getStringLines()).append(System.lineSeparator()); + + return sb.toString(); + } + + +} diff --git a/src/main/java/game/ladder/domain/Line.java b/src/main/java/game/ladder/domain/Line.java new file mode 100644 index 0000000000..fab042602a --- /dev/null +++ b/src/main/java/game/ladder/domain/Line.java @@ -0,0 +1,41 @@ +package game.ladder.domain; + +import spark.utils.Assert; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class Line { + + private static final String DELIMITER = "|"; + private static final int MIN_SIZE = 1; + + private final List blocks; + + public Line(int blockSize) { + Assert.isTrue(blockSize >= MIN_SIZE, "blockSize는 1 이상이여야 합니다."); + this.blocks = makeBlocks(blockSize); + } + + private List makeBlocks(int blockSize) { + List list = new ArrayList<>(blockSize); + list.add(Block.EMPTY_BLOCK); + + for (int i = 1; i < blockSize; i++) { + Block before = list.get(i - 1); + Block newBlock = Block.nextBlock(before); + list.add(newBlock); + } + + return list; + } + + public int getBlockSize() { + return this.blocks.size(); + } + + public String getStringLine() { + return this.blocks.stream().map(Block::toString).collect(Collectors.joining(DELIMITER)) + DELIMITER; + } +} diff --git a/src/main/java/game/ladder/domain/Lines.java b/src/main/java/game/ladder/domain/Lines.java new file mode 100644 index 0000000000..47c74b92d9 --- /dev/null +++ b/src/main/java/game/ladder/domain/Lines.java @@ -0,0 +1,27 @@ +package game.ladder.domain; + +import java.util.List; + +public class Lines { + + private final List lines; + private final Height height; + + public Lines(List lines) { + this.lines = lines; + this.height = new Height(lines.size()); + } + + public Height getHeight() { + return this.height; + } + + public String getStringLines() { + StringBuilder sb = new StringBuilder(); + for (Line line : lines) { + sb.append(line.getStringLine()).append(System.lineSeparator()); + } + return sb.toString(); + } + +} diff --git a/src/main/java/game/ladder/domain/LinesGenerator.java b/src/main/java/game/ladder/domain/LinesGenerator.java new file mode 100644 index 0000000000..9ebf2945f2 --- /dev/null +++ b/src/main/java/game/ladder/domain/LinesGenerator.java @@ -0,0 +1,24 @@ +package game.ladder.domain; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class LinesGenerator { + + private final Height height; + + public LinesGenerator(Height height) { + this.height = height; + } + + public Lines generate(final int blockSize) { + + List lines = IntStream.range(0, blockSize) + .mapToObj(i -> new Line(blockSize)) + .collect(Collectors.toList()); + + return new Lines(lines); + } + +} diff --git a/src/main/java/game/ladder/domain/Name.java b/src/main/java/game/ladder/domain/Name.java new file mode 100644 index 0000000000..65c4309765 --- /dev/null +++ b/src/main/java/game/ladder/domain/Name.java @@ -0,0 +1,40 @@ +package game.ladder.domain; + +import spark.utils.Assert; +import spark.utils.StringUtils; + +public class Name { + private static final int MIN_LENGTH = 5; + private static final String FORMAT = "%6s"; + + private final String value; + + public Name(String value) { + Assert.isTrue(StringUtils.isNotBlank(value), "이름은 공백일 수 없습니다."); + Assert.isTrue(value.length() <= MIN_LENGTH, "이름은 5자를 넘길 수 없습니다."); + this.value = value; + } + + public String getValue() { + return this.value; + } + + public String fomattedName() { + return String.format(FORMAT, this.value); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Name name = (Name) o; + + return value.equals(name.value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } +} diff --git a/src/main/java/game/ladder/domain/Participant.java b/src/main/java/game/ladder/domain/Participant.java new file mode 100644 index 0000000000..4f081a5cd9 --- /dev/null +++ b/src/main/java/game/ladder/domain/Participant.java @@ -0,0 +1,47 @@ +package game.ladder.domain; + +public class Participant implements Comparable{ + + private final Name name; + private final Position position; + + public Participant(Name name, Position position) { + this.name = name; + this.position = position; + } + + public Name getName() { + return this.name; + } + + public Position getPosition() { + return this.position; + } + + public String formattedParticipantName() { + return this.name.fomattedName(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Participant that = (Participant) o; + + if (!name.equals(that.name)) return false; + return position.equals(that.position); + } + + @Override + public int hashCode() { + int result = name.hashCode(); + result = 31 * result + position.hashCode(); + return result; + } + + @Override + public int compareTo(Participant other) { + return this.position.compareTo(other.position); + } +} diff --git a/src/main/java/game/ladder/domain/Participants.java b/src/main/java/game/ladder/domain/Participants.java new file mode 100644 index 0000000000..2a672c194b --- /dev/null +++ b/src/main/java/game/ladder/domain/Participants.java @@ -0,0 +1,25 @@ +package game.ladder.domain; + +import spark.utils.Assert; + +import java.util.SortedSet; + +public class Participants { + + private static final int MIN_PARTICIPANTS = 2; + + private final SortedSet participants; + + public Participants(SortedSet participants) { + Assert.isTrue(participants.size() >= MIN_PARTICIPANTS, "적어도 두 명 이상의 참여자가 필요합니다."); + this.participants = participants; + } + + public int size() { + return this.participants.size(); + } + + public String getAllFormattedNames() { + return this.participants.stream().map(Participant::formattedParticipantName).reduce("", String::concat); + } +} diff --git a/src/main/java/game/ladder/domain/Position.java b/src/main/java/game/ladder/domain/Position.java new file mode 100644 index 0000000000..3b9914bc6f --- /dev/null +++ b/src/main/java/game/ladder/domain/Position.java @@ -0,0 +1,43 @@ +package game.ladder.domain; + +import spark.utils.Assert; + +public class Position implements Comparable { + + public static final int MIN_VALUE = 1; + + private final int value; + + public Position(int value) { + Assert.isTrue(isNotLowerThanMinValue(value), String.format("value의 크기는 %d 보다 작을 수 없습니다.", MIN_VALUE)); + this.value = value; + } + + private boolean isNotLowerThanMinValue(int value) { + return value >= MIN_VALUE; + } + + @Override + public int compareTo(Position other) { + return Integer.compare(this.value, other.value); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Position position = (Position) o; + + return value == position.value; + } + + @Override + public int hashCode() { + return value; + } + + public int getValue() { + return this.value; + } +} diff --git a/src/main/java/game/ladder/util/Spliter.java b/src/main/java/game/ladder/util/Spliter.java new file mode 100644 index 0000000000..545d81a20b --- /dev/null +++ b/src/main/java/game/ladder/util/Spliter.java @@ -0,0 +1,15 @@ +package game.ladder.util; + +import java.util.Arrays; +import java.util.List; +import java.util.regex.Pattern; + +public final class Spliter { + + public static final Pattern SPLIT_PATTERN = Pattern.compile("\\s*,\\s*"); + + public static List split(String str) { + return Arrays.asList(SPLIT_PATTERN.split(str)); + } + +} diff --git a/src/main/java/game/ladder/view/InputView.java b/src/main/java/game/ladder/view/InputView.java new file mode 100644 index 0000000000..5f1416b33c --- /dev/null +++ b/src/main/java/game/ladder/view/InputView.java @@ -0,0 +1,28 @@ +package game.ladder.view; + +import game.ladder.domain.*; +import game.ladder.util.Spliter; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class InputView { + + private static final Scanner scanner = new Scanner(System.in); + + public static Participants readParticipant() { + System.out.println("참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"); + final List names = Spliter.split(scanner.nextLine()).stream().map(Name::new).collect(Collectors.toList()); + TreeSet participants = IntStream.range(0, names.size()) + .mapToObj(i -> new Participant(names.get(i), new Position(i + 1))) + .collect(Collectors.toCollection(TreeSet::new)); + + return new Participants(participants); + } + + public static Height readHeight() { + System.out.println("최대 사다리 높이는 몇 개인가요?"); + return new Height(Integer.parseInt(scanner.nextLine().trim())); + } +} diff --git a/src/main/java/game/ladder/view/OutputView.java b/src/main/java/game/ladder/view/OutputView.java new file mode 100644 index 0000000000..471a6902df --- /dev/null +++ b/src/main/java/game/ladder/view/OutputView.java @@ -0,0 +1,9 @@ +package game.ladder.view; + +import game.ladder.domain.Ladder; + +public class OutputView { + public static void printLadder(Ladder ladder) { + System.out.println(ladder.makeStringLadder()); + } +} diff --git a/src/test/java/game/ladder/domain/BlockTest.java b/src/test/java/game/ladder/domain/BlockTest.java new file mode 100644 index 0000000000..62f0073a14 --- /dev/null +++ b/src/test/java/game/ladder/domain/BlockTest.java @@ -0,0 +1,56 @@ +package game.ladder.domain; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class BlockTest { + + @Test + public void 만들기_비어있는_블록() { + final Block block = Block.EMPTY_BLOCK; + final String expectedShapes = BlockType.EMPTY.makeShapes(Block.WIDTH); + + assertThat(block.getType()).isSameAs(BlockType.EMPTY); + assertThat(block.toString()).isEqualTo(expectedShapes); + } + + @Test + public void 만들기_채워진_블록() { + final Block block = Block.FILLED_BLOCK; + final String expectedShapes = BlockType.FILLED.makeShapes(Block.WIDTH); + + assertThat(block.getType()).isSameAs(BlockType.FILLED); + assertThat(block.toString()).isEqualTo(expectedShapes); + } + + @Test + public void 동일성_테스트() { + final Block block1 = Block.EMPTY_BLOCK; + final Block block2 = Block.EMPTY_BLOCK; + + assertThat(block1).isSameAs(block2); + } + + @Test + public void equals_동등하지_않음() { + final Block block = Block.FILLED_BLOCK; + final Block other = Block.EMPTY_BLOCK; + assertThat(block.equals(other)).isFalse(); + } + + @Test + public void equals_동등함() { + final Block block = Block.EMPTY_BLOCK; + final Block other = Block.EMPTY_BLOCK; + assertThat(block.equals(other)).isTrue(); + } + + @Test + public void 다음_블록_안채워진_블록인지_확인() { + final Block before = Block.FILLED_BLOCK; + Block next = Block.nextBlock(before); + + assertThat(next).isSameAs(Block.EMPTY_BLOCK); + } +} \ No newline at end of file diff --git a/src/test/java/game/ladder/domain/HeightTest.java b/src/test/java/game/ladder/domain/HeightTest.java new file mode 100644 index 0000000000..0206d072d2 --- /dev/null +++ b/src/test/java/game/ladder/domain/HeightTest.java @@ -0,0 +1,41 @@ +package game.ladder.domain; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class HeightTest { + + @Test + public void 만들기() { + final int input = 5; + Height height = new Height(input); + + assertThat(height.getValue()).isEqualTo(input); + } + + @Test(expected = IllegalArgumentException.class) + public void 값이_0일때() { + final int input = 0; + + new Height(input); + } + + @Test + public void 동등성_확인_같을때() { + final int value = 3; + + Height height1 = new Height(value); + Height height2 = new Height(value); + + assertThat(height1).isEqualTo(height2); + } + + @Test + public void 동등성_확인_다를때() { + Height height1 = new Height(2); + Height height2 = new Height(3); + + assertThat(height1).isNotEqualTo(height2); + } +} \ No newline at end of file diff --git a/src/test/java/game/ladder/domain/LadderTest.java b/src/test/java/game/ladder/domain/LadderTest.java new file mode 100644 index 0000000000..195351ffd2 --- /dev/null +++ b/src/test/java/game/ladder/domain/LadderTest.java @@ -0,0 +1,24 @@ +package game.ladder.domain; + +import org.junit.Test; + +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class LadderTest { + + @Test + public void 만들기() { + final LinesGenerator generator = new LinesGenerator(new Height(5)); + final Participants participants = new Participants(makeParticipants()); + Ladder ladder = new Ladder(generator, participants); + } + + private SortedSet makeParticipants() { + return IntStream.rangeClosed(1, 3) + .mapToObj(i -> new Participant(new Name(String.valueOf(i)), new Position(i))) + .collect(Collectors.toCollection(TreeSet::new)); + } +} \ No newline at end of file diff --git a/src/test/java/game/ladder/domain/LineTest.java b/src/test/java/game/ladder/domain/LineTest.java new file mode 100644 index 0000000000..bdb222002b --- /dev/null +++ b/src/test/java/game/ladder/domain/LineTest.java @@ -0,0 +1,23 @@ +package game.ladder.domain; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LineTest { + + @Test + public void 만들기() { + final int blockSize = 3; + Line line = new Line(blockSize); + assertThat(line.getBlockSize()).isEqualTo(blockSize); + } + + @Test(expected = IllegalArgumentException.class) + public void 만들기_0넣을때() { + final int blockSize = 0; + + new Line(blockSize); + } + +} \ No newline at end of file diff --git a/src/test/java/game/ladder/domain/LinesGeneratorTest.java b/src/test/java/game/ladder/domain/LinesGeneratorTest.java new file mode 100644 index 0000000000..eef00e23a2 --- /dev/null +++ b/src/test/java/game/ladder/domain/LinesGeneratorTest.java @@ -0,0 +1,22 @@ +package game.ladder.domain; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LinesGeneratorTest { + + @Test + public void 라인_만들기() { + final int blockSize = 3; + final Height height = new Height(3); + LinesGenerator generator = new LinesGenerator(height); + + Lines lines = generator.generate(blockSize); + + assertThat(lines.getHeight()).isEqualTo(height); + } + + + +} \ No newline at end of file diff --git a/src/test/java/game/ladder/domain/LinesTest.java b/src/test/java/game/ladder/domain/LinesTest.java new file mode 100644 index 0000000000..18e90b0fdf --- /dev/null +++ b/src/test/java/game/ladder/domain/LinesTest.java @@ -0,0 +1,20 @@ +package game.ladder.domain; + +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LinesTest { + + @Test + public void 만들기() { + List inputs = Arrays.asList(new Line(3)); + Lines lines = new Lines(inputs); + + assertThat(lines.getHeight()).isEqualTo(new Height(inputs.size())); + } + +} \ No newline at end of file diff --git a/src/test/java/game/ladder/domain/NameTest.java b/src/test/java/game/ladder/domain/NameTest.java new file mode 100644 index 0000000000..ce5bfeae63 --- /dev/null +++ b/src/test/java/game/ladder/domain/NameTest.java @@ -0,0 +1,38 @@ +package game.ladder.domain; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class NameTest { + + @Test + public void 만들기() { + final String value = "name"; + Name name = new Name(value); + + assertThat(name.getValue()).isEqualTo(value); + } + + @Test(expected = IllegalArgumentException.class) + public void 이름이_공백일때() { + final String emptyValue = ""; + + new Name(emptyValue); + } + + @Test(expected = IllegalArgumentException.class) + public void 이름이_6자일때() { + final String value = "123456"; + + new Name(value); + } + + @Test + public void 포메팅된_이름() { + Name name = new Name("name"); + + assertThat(name.fomattedName().length()).isEqualTo(6); + } + +} \ No newline at end of file diff --git a/src/test/java/game/ladder/domain/ParticipantTest.java b/src/test/java/game/ladder/domain/ParticipantTest.java new file mode 100644 index 0000000000..6754a6c01d --- /dev/null +++ b/src/test/java/game/ladder/domain/ParticipantTest.java @@ -0,0 +1,78 @@ +package game.ladder.domain; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.SortedSet; +import java.util.TreeSet; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ParticipantTest { + + @Test + public void 참여자_만들기() { + final Name name = new Name("name"); + final Position position = new Position(2); + Participant participant = new Participant(name, position); + + assertThat(participant.getName()).isEqualTo(name); + assertThat(participant.getPosition()).isEqualTo(position); + } + + @Test + public void 참여자_동등성_확인() { + final Name name = new Name("test"); + final Position position = new Position(1); + + final Participant participant1 = new Participant(name, position); + final Participant participant2 = new Participant(name, position); + + assertThat(participant1).isEqualTo(participant2); + } + + @Test + public void 참여자_동등성_확인_이름_다를때() { + final Position position = new Position(1); + + final Participant participant1 = new Participant(new Name("a"), position); + final Participant participant2 = new Participant(new Name("b"), position); + + assertThat(participant1).isNotEqualTo(participant2); + } + + @Test + public void 참여자_동등성_확인_포지션_다를때() { + final Name name = new Name("name"); + + final Participant participant1 = new Participant(name, new Position(3)); + final Participant participant2 = new Participant(name, new Position(4)); + + assertThat(participant1).isNotEqualTo(participant2); + } + + @Test + public void 참여자_정렬() { + final List testList = makeTestList(); + + SortedSet participants = new TreeSet<>(testList); + + assertThat(participants).containsSequence(testList.toArray(new Participant[]{})); + } + + + private List makeTestList() { + List list = new ArrayList<>(); + final Position first = new Position(1); + final Position second = new Position(2); + final Position third = new Position(3); + + list.add(new Participant(new Name("1"), first)); + list.add(new Participant(new Name("2"), second)); + list.add(new Participant(new Name("3"), third)); + + return list; + } + +} \ No newline at end of file diff --git a/src/test/java/game/ladder/domain/ParticipantsTest.java b/src/test/java/game/ladder/domain/ParticipantsTest.java new file mode 100644 index 0000000000..7285120712 --- /dev/null +++ b/src/test/java/game/ladder/domain/ParticipantsTest.java @@ -0,0 +1,38 @@ +package game.ladder.domain; + +import org.junit.Before; +import org.junit.Test; + +import java.util.Arrays; +import java.util.SortedSet; +import java.util.TreeSet; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ParticipantsTest { + + private SortedSet inputs; + private Participants participants; + + @Before + public void setup() { + inputs = new TreeSet<>(Arrays.asList( + new Participant(new Name("1"), new Position(1)), new Participant(new Name("2"), new Position(2)) + ) + ); + + participants = new Participants(inputs); + } + + @Test + public void 만들기() { + assertThat(participants.size()).isEqualTo(inputs.size()); + } + + @Test(expected = IllegalArgumentException.class) + public void 만들기_참여자_한명_일때() { + inputs = new TreeSet<>(Arrays.asList(new Participant(new Name("1"), new Position(1)))); + + new Participants(inputs); + } +} \ No newline at end of file diff --git a/src/test/java/game/ladder/domain/PositionTest.java b/src/test/java/game/ladder/domain/PositionTest.java new file mode 100644 index 0000000000..6e44ee5ff7 --- /dev/null +++ b/src/test/java/game/ladder/domain/PositionTest.java @@ -0,0 +1,51 @@ +package game.ladder.domain; + +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class PositionTest { + + @Test + public void 만들기() { + final int expected = 2; + Position position = new Position(expected); + + assertThat(position.getValue()).isEqualTo(expected); + } + + @Test(expected = IllegalArgumentException.class) + public void MIN_POSITION_보다_작은값_생성() { + final int lower = Position.MIN_VALUE - 1; + + new Position(lower); + } + + @Test + public void 동등성_테스트() { + final int value = 3; + + final Position position1 = new Position(value); + final Position position2 = new Position(value); + + assertThat(position1).isEqualTo(position2); + } + + @Test + public void 정렬하기() { + final Position position1 = new Position(1); + final Position position2 = new Position(2); + final Position position3 = new Position(3); + + List positions = Arrays.asList(position3, position1, position2); + + Collections.sort(positions); + + assertThat(positions).containsSequence(position1, position2, position3); + } + +} \ No newline at end of file diff --git a/src/test/java/game/ladder/util/SpliterTest.java b/src/test/java/game/ladder/util/SpliterTest.java new file mode 100644 index 0000000000..cffdda3580 --- /dev/null +++ b/src/test/java/game/ladder/util/SpliterTest.java @@ -0,0 +1,46 @@ +package game.ladder.util; + +import org.junit.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class SpliterTest { + + @Test + public void 붙어있는_콤마() { + String line = "a,b,c,d"; + + List split = Spliter.split(line); + + assertThat(split).hasSize(4).containsSequence("a","b","c","d"); + } + + @Test + public void 콤마_뒤만_떨어져_있을때() { + String line = "a, b, c, d"; + + List split = Spliter.split(line); + + assertThat(split).hasSize(4).containsSequence("a","b","c","d"); + } + + @Test + public void 콤마_앞에만_떨어져_있을때() { + String line = "a ,b ,c ,d"; + + List split = Spliter.split(line); + + assertThat(split).hasSize(4).containsSequence("a","b","c","d"); + } + + @Test + public void 불규칙하게_떨어져_있을때() { + String line = "a , b ,c, d"; + + List split = Spliter.split(line); + + assertThat(split).hasSize(4).containsSequence("a","b","c","d"); + } +} \ No newline at end of file