import models.Algo; import org.junit.jupiter.api.Test; import java.util.AbstractMap; import static controls.ConstantMethods.printAlgoState; import static org.junit.jupiter.api.Assertions.*; public class AlgoTest { @Test void ゲーム開始時0から11のカードで構成されたデッキとそこから2枚引いて構成された各プレイヤーの手札が存在する() { Algo algo = new Algo(); printAlgoState(algo); assertEquals(2, algo.getHandsA().size()); assertEquals(2, algo.getHandsB().size()); } @Test void Aはデッキから引いたカードでアタックが成功してBのカードが1枚表になる() { //初期化 Algo algo = new Algo(); var iniHandsANum = algo.getHandsA().size(); var initDeckNum=algo.getDeck().size(); //正解のカードを選択させるための変数 var guess = algo.getHandsB().get(0).getKey(); var target = 0; //テスト対象メソッド //algo.drawA(guess, target); algo.inputDrawA(guess,target); printAlgoState(algo); //Aはデッキから引いているので,実行前と比べて枚数が1枚増えているか assertEquals(iniHandsANum+1,algo.getHandsA().size()); //Aによってアタックを成功されたBのカードが表になっているか assertEquals(true, algo.getHandsB().get(0).getValue()); //Aがデッキから引いているので,デッキの枚数が1枚減っているか assertEquals(initDeckNum-1,algo.getDeck().size()); } @Test void Aはデッキから引いたカードでアタックが失敗してAのデッキに表のカードが追加される() { //初期化 Algo algo = new Algo(); var iniHandsANum = algo.getHandsA().size(); var initDeckNum=algo.getDeck().size(); //正解でないカードを選択させるための変数 var guess = algo.getHandsB().get(0).getKey()+1; var target = 0; var top = algo.getDeck().get(0); //テスト対象メソッド // algo.drawA(guess, target); algo.inputDrawA(guess, target); printAlgoState(algo); //Aはデッキから引いているので,実行前と比べて枚数が1枚増えている assertEquals(iniHandsANum+1,algo.getHandsA().size()); //アタックの失敗でBのカードが表になっていない assertEquals(false, algo.getHandsB().get(0).getValue()); //アタックが失敗したので,使用したカードが表になっている assertTrue(algo.getHandsA().contains(new AbstractMap.SimpleEntry<>(top.getKey(),true))); //Aがデッキから引いているので,デッキの枚数が1枚減っている assertEquals(initDeckNum-1,algo.getDeck().size()); } @Test void Bはデッキから引いたカードでアタックが成功してAのカードが1枚表になる() { //初期化 Algo algo = new Algo(); var iniHandsBNum = algo.getHandsB().size(); var initDeckNum=algo.getDeck().size(); //正解のカードを選択させるための変数 var guess = algo.getHandsA().get(0).getKey(); var target = 0; //テスト対象メソッド // algo.drawB(guess, target); algo.inputDrawB(guess, target); printAlgoState(algo); //Aはデッキから引いているので,実行前と比べて枚数が1枚増えているか assertEquals(iniHandsBNum+1,algo.getHandsB().size()); //Aによってアタックを成功されたBのカードが表になっているか assertEquals(true, algo.getHandsA().get(0).getValue()); //Aがデッキから引いているので,デッキの枚数が1枚減っているか assertEquals(initDeckNum-1,algo.getDeck().size()); } @Test void Aは手札から選んだカードでアタックが成功してBのカードが1枚表になる() { //初期化 Algo algo = new Algo(); //正解のカードを選択させるための変数 var guess = algo.getHandsB().get(0).getKey(); var target = 0; var attacker = 0; //テスト対象メソッド //algo.selectA(guess, attacker, target); algo.inputSelectA(guess, attacker, target); printAlgoState(algo); //Aによってアタックを成功されたBのカードが表になっているか assertEquals(true, algo.getHandsB().get(target).getValue()); //Aのアタックを成功しているので,使用したカードが表になっていないか assertEquals(false, algo.getHandsA().get(attacker).getValue()); } @Test void Aは手札から選んだカードでのアタックが失敗し選んだカードが表になる() { //初期化 Algo algo = new Algo(); //間違いのカードを選択させるための変数 var target = 0; var attacker = 0; var guess = algo.getHandsB().get(target).getKey()+1; //テスト対象メソッド // algo.selectA(guess, attacker, target); algo.inputSelectA(guess, attacker, target); printAlgoState(algo); //Aによってアタックを成功されたBのカードが表になっていないか assertEquals(false, algo.getHandsB().get(target).getValue()); //Aのアタックが失敗しているので,使用したカードが表になっているか assertEquals(true, algo.getHandsA().get(attacker).getValue()); } @Test void playA(){ Algo algo = new Algo(); //正解のカードを選択させるための変数 var guess = algo.getHandsB().get(0).getKey(); var target = 0; var attacker = 0; printViewA(algo); //Aはカードを1枚引き,アタックを成功させる. //Bはアタックされたカードを表にする. algo.inputDrawA(guess, target); printViewA(algo); //Bはカードを1枚引き,アタックが失敗する. //Bはアタックに使用したカードを表にする. algo.inputDrawB(guess,target); printViewA(algo); int tar=0, gue=0; for(int i=0;i<algo.getHandsB().size();i++){ if(algo.getHandsB().get(i).getValue()==false){ tar=i; gue=algo.getHandsB().get(i).getKey(); break; } } //Aはカードを1枚引き,アタックを成功させる. //Bは全てのカードが表になるので,ゲームが終了する algo.inputDrawA(gue, tar); printViewA(algo); } void printViewA(Algo algo){ String s="--------------\n"; s+="\thandsB:\t"; for(var b : algo.getHandsB()){ s+=(b.getValue()?"["+b.getKey()+"+]":"[ -]"); } s+="\ndeck: "+algo.getDeck().size()+"\n"; s+="\thandsA:\t"; for(var a : algo.getHandsA()){ s+="["+a.getKey()+(a.getValue()?"+":"-")+"]"; } s+="\n\n"; if(algo.getLoseA())s+="B win.\n"; else if(algo.getLoseB())s+="A win.\n"; System.out.println(s); } void printViewB(Algo algo){ String s=""; s+="\thandsA:\t"; for(var a : algo.getHandsA()){ s+=(a.getValue()?"["+a.getKey()+"+]":"[ -]"); } s+="\n\t\t\t\t\tdeck: "+algo.getDeck().size()+"\n"; s+="\thandsB:\t"; for(var b : algo.getHandsB()){ s+="["+b.getKey()+(b.getValue()?"+":"-")+"]"; } System.out.println(s); } }