/* * Copyright (C) 2015 Arles. All rights reserved. * <p/> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * <p/> * http://www.apache.org/licenses/LICENSE-2.0 * <p/> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.arles.swissmanager.test.tournament; import com.arles.swissmanager.tournament.Match; import com.arles.swissmanager.tournament.MatchesCreator; import com.arles.swissmanager.tournament.Player; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.fail; /** * Tests pairs matching and creation of match list on different number of players. * Created by Admin on 15.08.2015. */ public class MatchesCreatorTest { private MatchesCreator mCreator; private List<Player> mPlayerList = new ArrayList<>(); private List<Match> mExpectedMatchList = new ArrayList<>(); @Before public void setUp() { mCreator = new MatchesCreator(); } /** * Tests attempt to pair list with one player. * Must returns empty match list. */ @Test public void test1playerMatching_ReturnEmpty() { setListWith1Player(); List<Match> actualMatchList = mCreator.createMatchList(mPlayerList); assertEquals("Result must be empty list;", mExpectedMatchList, actualMatchList); } /** * Tests attempt to pair 2 player. * Must returns pair between this players. */ @Test public void test2players_ReturnsMatches() { setListWith2Players(); List<Match> actualMatchList = mCreator.createMatchList(mPlayerList); assertEquals("Size must be 2;", mPlayerList.size(), actualMatchList.size()); } @Test public void testByeOn3players_ReturnsMatches() { setListWith3Players(); // sort collection by prestige Collections.sort(mPlayerList); List<Match> actualMatchList = mCreator.createMatchList(mPlayerList); assertEquals("Size must be 2;", mPlayerList.size() - 1, actualMatchList.size()); // get the last in list Player expectedPlayerBye = mPlayerList.get(mPlayerList.size() - 1); assertEquals(expectedPlayerBye, mCreator.getByePlayer()); } /** * Tests players matching. * Tests that each player in players list has a pair and he has not played it yet. */ @Test public void testMatching_ReturnsMatches() { List<Player> copyPlayers = setListWith6Players(); mPlayerList = new ArrayList<>(copyPlayers); List<Match> actualMatchList = mCreator.createMatchList(mPlayerList); assertEquals("Size must be 6;", mPlayerList.size(), actualMatchList.size()); for (Player player : copyPlayers) { if (hasCorrectPair(player, actualMatchList)) { continue; } fail("Incorrect matching;"); } } private boolean hasCorrectPair(Player player, List<Match> matchList) { for (Match match : matchList) { if(match.getPlayer1().equals(player)) { Player chosenRival = match.getPlayer2(); if(!player.hadPlayed(chosenRival)) { return true; } } } return false; } private void setListWith1Player() { Player p1 = new Player("John"); mPlayerList.add(p1); mExpectedMatchList = new ArrayList<>(); } private void setListWith2Players() { Player p1 = new Player("John"); Player p2 = new Player("Alex"); mPlayerList.add(p1); mPlayerList.add(p2); } private void setListWith3Players() { Player p1 = new Player("John"); Player p2 = new Player("Alex"); Player p3 = new Player("David"); mPlayerList.add(p1); mPlayerList.add(p2); mPlayerList.add(p3); } private List<Player> setListWith6Players() { List<Player> dataList = new ArrayList<>(); final Player p1 = new Player("John", 2, false); final Player p2 = new Player("Alex", 1, false); final Player p3 = new Player("David", 6, false); final Player p4 = new Player("Martin", 2, false); final Player p5 = new Player("Brian", 3, false); final Player p6 = new Player("Harry", 3, false); Set<Player> list = new HashSet<>(); list.add(p2); list.add(p5); p1.setRival(list); list.clear(); list.add(p4); list.add(p1); p2.setRival(list); list.clear(); list.add(p4); list.add(p6); p3.setRival(list); list.clear(); list.add(p2); list.add(p3); p4.setRival(list); list.clear(); list.add(p1); list.add(p6); p5.setRival(list); list.clear(); list.add(p3); list.add(p5); p6.setRival(list); dataList.add(p1); dataList.add(p2); dataList.add(p3); dataList.add(p4); dataList.add(p5); dataList.add(p6); return dataList; } }